簡體   English   中英

ASP.NET MVC5控制器和Autofac

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM