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