【发布时间】: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