C# 4.0 如何为asp.net MVC 5配置StructureMap
我在犯错误。我的设置类似于asp.NETMVC4 没有为此对象定义无参数构造函数。描述:安 执行当前网站时发生未处理的异常 要求请查看堆栈跟踪以了解有关堆栈的更多信息 错误及其在代码中的起源 异常详细信息:System.MissingMethodException:未为此对象定义无参数构造函数 最终发现实际异常“尝试获取HomeController类型的实例时发生激活错误,密钥”“”C# 4.0 如何为asp.net MVC 5配置StructureMap,c#-4.0,asp.net-mvc-4,dependency-injection,structuremap,asp.net-mvc-5,C# 4.0,Asp.net Mvc 4,Dependency Injection,Structuremap,Asp.net Mvc 5,我在犯错误。我的设置类似于asp.NETMVC4 没有为此对象定义无参数构造函数。描述:安 执行当前网站时发生未处理的异常 要求请查看堆栈跟踪以了解有关堆栈的更多信息 错误及其在代码中的起源 异常详细信息:System.MissingMethodException:未为此对象定义无参数构造函数 最终发现实际异常“尝试获取HomeController类型的实例时发生激活错误,密钥”“” 将服务类注入主控制器时出错,以下步骤对我有效: 在Visual Studio 2013 RTM中创建新的ASP.
将服务类注入主控制器时出错,以下步骤对我有效:
StructureMap.MVC4
numget:
Install-Package StructureMap.MVC4
public interface IDependency
{
string SayHello();
}
public class ConcreteDepenedency: IDependency
{
public string SayHello()
{
return "Hello World";
}
}
public interface IDependency
{
string SayHello();
}
public class ConcreteDepenedency: IDependency
{
public string SayHello()
{
return "Hello World";
}
}
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;
}
}
}
使用StructureMap;
使用WebApplication1.控制器;
命名空间WebApplication1.DependencyResolution{
公共静态类IoC{
公共静态IContainer初始化(){
ObjectFactory.Initialize(x=>
{
x、 For().Use();
});
返回ObjectFactory.Container;
}
}
}
ConcreteDependency
已成功注入HomeController
希望能有所帮助。感谢您的回复,最终找到了问题所在。 在我的服务类中,我引用了一个应用程序设置,但没有在web.config文件中定义它,因为structuremap无法插入我的服务类的实例
private readonly string _path =
ConfigurationManager.AppSettings["vp"].ToString(CultureInfo.InvariantCulture);
我在这里详细介绍了如何使用最新的StructureMap for MVC 5软件包实现此功能: 这与我之前发布的ASP.NET MVC 3中所需的内容没有多大区别:
基本上,您只需安装正确的NuGet包,修改控制器以接受依赖项,并将接口连接到IoC.cs中的实现。如果您遵循StructureMap的默认约定,则可以针对多种类型自动执行此连接。看起来您正在尝试使用与ASP.NET MVC 5不兼容的StructureMap版本。您似乎试图安装根据旧版本的ASP.NET MVC编译的StructureMap NuGet。您使用的是哪个版本的NuGet?请使用此示例工作正常,但当我尝试注入服务类时,我遇到以下错误“尝试获取HomeController类型的实例时发生激活错误,键“””请使用它,这对于MVC5来说是一个更好的impl。简单明了。Darin Dimitrov示例运行良好,但当我尝试向存储库注入服务类时,我遇到了以下错误:在尝试获取HomeController类型的实例时发生了激活错误,键“”ToString(CultureInfo.InvariantCulture)实现了什么<代码>应用程序设置是一个<代码>字符串。ToString(IFormatProvider)记录了要执行的操作。