MVCでautofacを使用しているので、私のコントローラにコンストラクタが組み込まれている場合、Global.asaxに次のようなコードがあります。Autofacを使用してサービスを終了するものをすべて登録する
// Register your MVC controllers.
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<PurchaseOrderSearchService>().As<IPurchaseOrderSearchService>().WithParameter("context", new PurchaseOrderManagerContext());
// Set the dependency resolver to be Autofac.
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
問題は、私はすべての私のサービスのために、何度も何度もbuilder.RegisterTypeを行うにはしたくないです。だから私はそれをどうやってやるの?
私は私が望むものの種類が
builder.RegisterAssemblyTypes(foo)
.Where(t => t.Name.EndsWith("Services"))
.WithParameter("context", new PurchaseOrderManagerContext());
しかし、fooがどうあるべきか全く分からないと思います。または、RegisterAssemblyTypesが正しい方法である場合 私は慣例によるコーディングが解決策であることを知っていますが、慣習が何であるかはわかりません。 すべての私のサービスがintワードサービスを終了しますので、FooServiceは、インタフェースIFooService を持つことになりますし、BarServiceはインタフェースIBarService
を持っていますインターフェース
を持っていますまた、すべてのサービスがPurchaseOrderManagerと呼ばれるクラスライブラリに住んでいることを指摘しなければなりません。サービス
私はそれが私が望むものだと思うが、私はすべてのサービスをPurchaseOrderManager.Serviceというクラスライブラリに入れているので、エラーを投げている 'Autofac.Core.Activators.Reflection.DefaultConstructorFinderで見つかったコンストラクタはありません'型' PurchaseOrderManager.Controllers.PurchaseOrderSearchController 'は、利用可能なサービスとパラメータを使用して呼び出すことができます: コンストラクタの' PurchaseOrderManager.Service.Services.Interfaces.IPurchaseOrderSearchServiceサービス 'パラメータを解決できません' Void .ctor(PurchaseOrderManager.Service.Services.Interfaces .IPurchaseOrderSearchService) 'を選択します。 –
回答が更新されました。 – Richard
私はオートファックモデルを使いました。私はprotected overrideを持っています。void Load(ContainerBuilder builder) { // "thisAssembly"は "モジュールと同じアセンブリ内のすべての型"を意味します builder.RegisterAssemblyTypes(ThisAssembly) .Where(t => t.Name.EndsWith "Services")) .WithParameter( "context"、新しいPurchaseOrderManagerContext()) 。AsImplementedInterfaces(); }しかし、これはクラスlibaryとして何もオーバーライドしていないので、呼び出されることはありません –