首先通过NuGet尝试StructureMap和MVC3

Jon*_*edo 5 structuremap asp.net-mvc entity-framework code-first asp.net-mvc-3

我正在尝试如何为ASP.NET MVC3配置StructureMap我已经使用NuGet,我注意到它创建了一个名为StructuremapMVC的cs文件的App_Start文件夹,所以我检查它并注意到它是相同的代码但是简化了将在Global.asax上的App_Start部分手动编写...

这是我在IoC Class中的代码

public static class IoC
    {
        public static IContainer Initialize()
        {
            ObjectFactory.Initialize(x =>
                        {
                            x.Scan(scan =>
                                    {
                                        scan.TheCallingAssembly();
                                        scan.WithDefaultConventions();
                                        scan.AddAllTypesOf<IController>();
                                    });
                            x.For<OpcionDB>().Use(() => new DatabaseFactory().Get());
                        });
            return ObjectFactory.Container;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么当我在控制器上注入一些IoC时会出现异常(我使用这种模式:实体框架4 CTP 4/CTP 5通用存储库模式和单元可测试):

        private readonly IAsambleaRepository _aRep;
        private readonly IUnitOfWork _uOw;

        public AsambleaController(IAsambleaRepository aRep, IUnitOfWork uOw)
        {
            _aRep = aRep;
            this._uOw = uOw;
        }

        public ActionResult List(string period)
        {
            var rs = _aRep.ByPeriodo(period).ToList<Asamblea>();

            return View();
        }
Run Code Online (Sandbox Code Playgroud)

例外显示:

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.
Run Code Online (Sandbox Code Playgroud)

Cha*_*ino 3

您收到该错误是因为您尚未设置 StructureMap 来解析构造 所需的依赖项,AsambleaController因此它尝试找到一个不存在的无参数构造函数。

所以你需要做的是为IAsambleaRepository和设置 StructureMap IUnitOfWork

顺便说一句,我想说这IUnitOfWork应该依赖于您的存储库而不是您的控制器......您的控制器不需要了解工作单元。