2014-09-30 30 views
0

我已经打包了一些我希望在其他项目中重用的库,这些库实现了IOC主体,并且我使用了Autofac。Nugetpacked库中的控制反转 - 传入依赖关系

当我在原始项目中创建这些库时,即使在重新分解到新库后,我的单元都会成功完成所有测试。

当我将这些库添加到测试项目中以查看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)); 

当我试图运行此我得到以下错误。
无法解析参数':

与“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”上键入“Boxharry.Inquire.Services.DatabaseService”发现一个构造函数可以与提供的服务和参数来调用空隙.ctor构造
的” Boxharry.Inquire.Models.InquireEntities实体(System.Collections.Generic.IList 1[Boxharry.Inquire.ViewModels.QuestionViewModel], System.Collections.Generic.IList 1 [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.Inquire实体)”。图书馆利用

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

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

我不确定如何进行,我想与Autofac玩弄的

示例注册组件,看它是否有我做的方式被改变。

如果这不起作用,我可能必须将IOC从我的库中剥离出来,而不是单元测试它们,这对我没有吸引力。

+0

您的示例中拼写错误?你好像两次注册'Model',但不是你的'Entities' – 2014-10-01 08:04:44

回答

0

我的软件包传入了模型的副本 - 一旦我从新项目中删除了这个错误,错误消失了。