1
是否可以使用autofac按名稱對組件的註冊進行分組?
例如,下面的代碼有兩個註冊IDbContextProvider。
我希望WfcService只解析IDbContextProvider的一個命名實例(「無代理」)。 我想使用類似DependsOnNamed(「無代理」)方法顯式設置具有相同名稱的一組命名實例的依賴關係。
我希望整個系統使用IDbContextProvider的默認實現,而IWfcService的後繼應使用它們自己的命名實例。autofac中的指定註冊
var builder = new ContainerBuilder();
builder.RegisterType<DbContextProvider>().As<IDbContextProvider>().As<IDbContextProvider>();
builder.RegisterType<ProxyLessDbContextProvider>().Named<IDbContextProvider>("proxyless");
builder.RegisterType<Repository>().As<IRepository>();//depends on IDbContextProvider
builder.RegisterType<BusinessService>().As<IBusinessService>();//depends on IRepository
builder.RegisterType<WfcService>().As<IWfcService>().DependsOnNamed("proxyless");//depends on IBusinessService
IContainer container = builder.Build();
var wcf = container.Resolve<IWfcService>(); // should depend on "proxyless" IDbContextProvider
不要以爲你可以做到這一點,但也許你可以使用終生範圍的「標籤」功能和InstancePerMatchingLifetimeScope(標籤)的方法來做到這一點。 –
它現在似乎有效。我使用的技巧是'AutofacHostFactory.Container = _container.BeginLifetimeScope(PersistanceRegistrationModule.ProxylessScope);'因此,每個wcf服務調用都使用自己的標記生命週期範例來實例化一個適當的IDbContextProvider實例。感謝您的建議。 – Stas
不幸的是,InstancePerMatchingLifetimeScope「覆蓋」默認實現,並且從「根」範圍解析不起作用 – Stas