簡體   English   中英

使用Autofac注冊以Service結尾的所有內容

[英]Using Autofac registering everything that ends with Service

所以我在MVC中使用autofac,所以我的控制器可以在那里注入構造函數,我有我的Global.asax我有以下代碼片段,它的工作原理。

// 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是正確的方式。 我知道按慣例編碼是解決方案,但不確定約定是什么。 我的所有服務都將以字服務結束並具有界面

所以FooService將具有接口IFooService,而BarService將具有接口IBarService

還應該指出所有服務都存在於名為PurchaseOrderManager.Service的類庫中

你走在正確的軌道上。 “Foo”應該是包含要注冊的類型的程序集 - 如果您使用的是單個程序集,則以下內容應該有效:

builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly)
    .Where(t => t.Name.EndsWith("Services"))
    .WithParameter("context", new PurchaseOrderManagerContext())
    .AsImplementedInterfaces();

.AsImplementedInterfaces()注冊為IFooService需要.AsImplementedInterfaces() - 沒有它,它們只會被注冊為FooService等。

如果您的類位於單獨的程序集中,我通常建議您在該程序集中定義一個autofac模塊:

public class ServiceModule : Module 
{
    protected override void Load(ContainerBuilder builder)
    {
        // "ThisAssembly" means "any types in the same assembly as the module"
        builder.RegisterAssemblyTypes(ThisAssembly)
            .Where(....
    }
}

然后在您的Web應用程序中注冊:

builder.RegisterModule<PurchaseOrderManager.Service.ServiceModule>();

或者,使用我的原始建議,但明確指定包含服務的程序集:

builder.RegisterAssemblyTypes(typeof(PurchaseOrderManager.Service.FooService).Assembly)
    .Where(t => t.Name.EndsWith("Services"))
    .WithParameter("context", new PurchaseOrderManagerContext())
    .AsImplementedInterfaces();

您只需要選擇該程序集中存在的任何類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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