如何为asp.net MVC 5配置StructureMap

Nav*_*een 17 structuremap dependency-injection c#-4.0 asp.net-mvc-4 asp.net-mvc-5

我低于错误.我设置它类似于asp.net mvc 4.

没有为此对象定义的无参数构造函数.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.MissingMethodException:没有为此对象定义的无参数构造函数.

终于找到了实际异常"尝试获取HomeController类型的实例时出现激活错误,密钥"""

当我要将服务类注入到家庭控制器时出现错误

Dar*_*rov 40

以下步骤对我有用:

  1. 在Visual Studio 2013 RTM中创建新的ASP.NET MVC 5应用程序
  2. 安装StructureMap.MVC4NuGet:

    Install-Package StructureMap.MVC4
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建一个新界面:

    public interface IDependency
    {
        string SayHello();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 实现此接口:

    public class ConcreteDepenedency: IDependency
    {
        public string SayHello()
        {
            return "Hello World";
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 让HomeController使用此界面:

    public class HomeController : Controller
    {
        private readonly IDependency dependency;
        public HomeController(IDependency dependency)
        {
            this.dependency = dependency;
        }
    
        public ActionResult Index()
        {
            return Content(this.dependency.SayHello());
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  6. ~/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;
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  7. 运行您的应用程序 Ctrl+F5

  8. ConcreteDependency成功的注入HomeController.

  • 请使用https://www.nuget.org/packages/StructureMap.MVC5/这是一个更好的MVC5的impl (3认同)

ssm*_*ith 10

我有一个详细的演练,展示如何使用最新的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的默认约定,则可以为多种类型自动进行此连接.


Nav*_*een -4

谢谢大家的回复终于找到问题了。在我的服务类中,我引用了一个应用程序设置,但没有在 web.config 文件中定义它,因为该结构图无法注入我的服务类的实例。

private readonly string _path =
            ConfigurationManager.AppSettings["vp"].ToString(CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

  • `ToString(CultureInfo.InvariantCulture)` 实现了什么?`AppSettings` 是一个 [`NameValueCollection`,它返回 `Item` 的 `string`](http://msdn.microsoft.com/en-us/library/8d0bzeeb(v=vs.110).aspx)。`String.ToString(IFormatProvider)` 被记录为执行...[无任何操作](http://msdn.microsoft.com/en-us/library/29dxe1x2(v=vs.110).aspx)。 (3认同)