2016-03-23 10 views
1

described hereというデザインを実装しました。ASP.NET MVC5、リポジトリパターン、UoW、Autofacを使用しました。ASP.NET MVC5コントローラとAutofac

すべてが単一のサービスとコントローラに動作しますが、私は3つのサービスを必要とするコントローラがあります。今

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(); 
} 

を、Iこのエラーが表示される:

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'namespace.Controllers.MyController' can be Invoked with the available services and parameters: Can not resolve parameter '.service.Service1 service1 constructor of 'Void .ctor ...

+1

あなたはAutofacコンテナ内のすべてのサービスを登録しましたか? – dotnetom

+0

投稿を更新します。はい、すべてのサービスを登録します。 個の作品 –

答えて

0

コンストラクタパラメータの数コントローラが持っています。 Autofacがservice1を解決できないと報告すると、IService1が登録されていないことを意味します。

誤ったクエリまたはアセンブリによってアセンブリタイプを登録する際に問題が発生することがあります。これを確認するには、RegisterAssemblyTypesをコメントアウトし、RegisterType<Service1>().As<IService1>().InstancePerRequest()を3つのサービスすべてに使用し、役立つかどうかを確認してください。また、モジュールLoadが実際に呼び出されたかどうかを確認してください。

登録サービスは、明示的に働いていた場合、あなたが戻っRegisterAssemblyTypesになってみたが、名前でそれをロードするのではなく、サービスタイプからのサービスアセンブリを使用することができます。

builder.RegisterAssemblyTypes(typeof (Service1).Assembly) 
     .Where(t => t.Name.EndsWith("Service")) 
     .AsImplementedInterfaces() 
     .InstancePerRequest(); 
関連する問題