[英]ASP.NET MVC5 controller and Autofac
我使用ASP.NET MVC5,存儲庫模式,UoW和Autofac實現了這里描述的設計。
一切都適用於具有單一服務的控制器,但我有一個需要三種服務的控制器:
public MyController(IService1 service1, IService2 service2, IService3 service3)
{
_service1= service1;
_service2= service2;
_service3= service3;
}
現在,我注冊這樣的服務:
protected override void Load(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes(Assembly.Load("namespace.service"))
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
在運行時,出現以下錯誤:
使用'namespace.Controllers.MyController'類型的'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'找到的構造函數都不能使用可用的服務和參數進行調用:無法解析參數'.service.Service1 service1構造函數'Void .ctor ...
您的控制器有多少個構造函數參數並不重要。 如果Autofac報告無法解析service1
,則表示IService1
未注冊。
由於查詢或匯編錯誤,可能存在注冊程序集類型的問題。 要驗證這一點,請嘗試注釋掉RegisterAssemblyTypes
並為所有三個服務使用RegisterType<Service1>().As<IService1>().InstancePerRequest()
,看看是否有幫助。 還要檢查模塊Load
真正被調用。
如果注冊服務明確有效,您可以嘗試返回RegisterAssemblyTypes
但使用服務類型的服務程序集,而不是按名稱加載它:
builder.RegisterAssemblyTypes(typeof (Service1).Assembly)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerRequest();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.