1

autofacを使用して名前でコンポーネントの登録をグループ化することは可能ですか?
たとえば、次のコードには、IDbContextProvider の 2 つの登録があります。
そして、WfcService で IDbContextProvider の名前付きインスタンス (「プロキシレス」) のみを解決したいと考えています。DependsOnNamed("proxyless")メソッドのようなものを使用して、同じ名前を持つ名前付きインスタンスのセットに依存関係を明示的に設定したいと思います。

システム全体で IDbContextProvider の既定の実装を使用し、IWfcService の後継者は独自の名前付きインスタンスを使用する必要があります。

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
4

1 に答える 1

1

説明されている動作を実現する最も適切な方法は、オーバーライドされた登録で別のスコープを使用することです。WCF サービスの登録をオーバーライドしたい場合は、

var _wcfScope = _container.BeginLifetimeScope(b=> 
{
    b.RegisterType<NewDbContextProvider>().As<DbContextProvider>();
    //put wcf services registration here because of the issue http://code.google.com/p/autofac/issues/detail?id=365
});
AutofacHostFactory.Container = _wcfScope;
于 2012-05-14T14:11:39.157 に答える