1

是否可以使用autofac按名称对组件的注册进行分组?
例如,下面的代码有两个 IDbContextProvider 注册。
而且我希望 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 回答