我正在低于错误。我设置它类似于 asp.net mvc 4。
没有为此对象定义无参数构造函数。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。
终于发现实际异常“尝试获取HomeController类型的实例时发生激活错误,键“””
当我要将服务类注入家庭控制器时发生错误
我正在低于错误。我设置它类似于 asp.net mvc 4。
没有为此对象定义无参数构造函数。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。
终于发现实际异常“尝试获取HomeController类型的实例时发生激活错误,键“””
当我要将服务类注入家庭控制器时发生错误
以下步骤对我有用:
安装StructureMap.MVC4
NuGet:
Install-Package StructureMap.MVC4
创建一个新界面:
public interface IDependency
{
string SayHello();
}
实现这个接口:
public class ConcreteDepenedency: IDependency
{
public string SayHello()
{
return "Hello World";
}
}
让 HomeController 使用这个接口:
public class HomeController : Controller
{
private readonly IDependency dependency;
public HomeController(IDependency dependency)
{
this.dependency = dependency;
}
public ActionResult Index()
{
return Content(this.dependency.SayHello());
}
}
在以下位置配置您的容器~/DependencyResolution/Ioc.cs
:
using StructureMap;
using WebApplication1.Controllers;
namespace WebApplication1.DependencyResolution {
public static class IoC {
public static IContainer Initialize() {
ObjectFactory.Initialize(x =>
{
x.For<IDependency>().Use<ConcreteDepenedency>();
});
return ObjectFactory.Container;
}
}
}
运行您的应用程序Ctrl+F5
ConcreteDependency
成功注入HomeController
。我有一个详细的演练展示如何使用最新的 StructureMap for MVC 5 包在这里工作: http: //ardalis.com/resolving-dependencies-in-asp.net-mvc-5-with-structuremap
这与我之前发布的 ASP.NET MVC 3 中所必需的并没有什么不同:http: //ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC-3
基本上,您只需安装正确的 NuGet 包,修改控制器以接受依赖项,并将接口连接到 IoC.cs 中的实现。如果您遵循 StructureMap 的默认约定,您可以让这种连线对许多类型自动发生。
StructureMap (2.6.4.1) 与 ASP.NET MVC 5 兼容,升级后您无需更改任何内容。
但是,升级过程并不像您想象的那么简单。
如果您必须遵循,这是所有步骤的列表。
PS:升级后我遵循了 Rick Anderson 的教程(他说你应该先这样做),但它仍然有效。
希望能帮助到你。
谢谢大家的回复,终于找到问题了。在我的服务类中,我引用了一个应用程序设置,但没有在 web.config 文件中定义它,因为该结构图无法注入我的服务类的实例。
private readonly string _path =
ConfigurationManager.AppSettings["vp"].ToString(CultureInfo.InvariantCulture);