【问题标题】:Inversion of control in Nugetpacked library's - Passing in the dependencyNugetpacked 库中的控制反转 - 传递依赖项
【发布时间】:2014-10-03 19:31:22
【问题描述】:

我已经打包了一些我希望在其他项目中重用的库,这些库实现了 IOC 主体,为此我使用 Autofac。

当我在原始项目中创建这些库时,一切正常 - 即使在重构到新库之后,我的单元测试也全部成功完成。

当我将这些库添加到测试项目以查看 Nuget 包是否正常工作时,问题出现了,我添加了我的包和 Autofac - 我连接 Autofac 以注入我的包所具有的依赖项 - 与我在创建这些的原始项目。

Autofac 管道/注册组件

        var builder = new ContainerBuilder();

        builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
                                        .Where(t => t.Name.EndsWith("Service"))
                                        .AsImplementedInterfaces();

        builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
                                        .Where(t => t.Name.EndsWith("Model"));

        builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
                                        .Where(t => t.Name.EndsWith("Model"))
                                        .AsImplementedInterfaces();


        builder.RegisterType<InquireEntities>();

        builder.RegisterControllers(typeof(MvcApplication).Assembly);

        var container = builder.Build();

        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

当我尝试运行它时,我收到以下错误。

可以使用可用的服务和参数调用在类型“Boxharry.Inquire.Services.DatabaseService”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数之一:
无法解析构造函数的参数“Boxharry.Inquire.Models.InquireEntities 实体”
'Void .ctor(System.Collections.Generic.IList1[Boxharry.Inquire.ViewModels.QuestionViewModel], System.Collections.Generic.IList1[Boxharry.Inquire.ViewModels.AnswerViewModel], boxharry.Inquire.Models.inquire_provided_answer,
System.Collections.Generic.IList`1[Boxharry.Inquire.ViewModels.ActivityViewModel]、boxharry.Inquire.Models.inquire_user_activity_link、Boxharry.Inquire.Models.InquireEntities)'。

库使用示例

    public HomeController(IDatabaseService databaseService)
    {
        _databaseService = databaseService;
    }

    //
    // GET: /Home/
    public ActionResult Index()
    {
        var test = _activityService.GetChildActivities(290);
        //other stuff
    }

我不确定如何进行,我正在考虑使用 Autofac 寄存器组件,看看是否必须更改我的操作方式。

如果这不起作用,我可能不得不从我的库中剥离 IOC 而不是对它们进行单元测试,这对我没有真正的吸引力。

【问题讨论】:

  • 您的样本中有拼写错误?您似乎注册了两次Model,但不是您的Entities

标签: c# asp.net-mvc dependency-injection autofac


【解决方案1】:

我的包传递了模型的副本 - 一旦我从新项目中删除它,错误就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2016-03-27
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多