是否可以有条件地在其他组件的状态上注册组件?就像是:
ContainerBuilder.RegisterConditionally<T>(
Func<IComponentContext, bool>,
Func<IComponentContext, T>);
Run Code Online (Sandbox Code Playgroud)
我发现在autofac的V2之前,可以使用一个Register().OnlyIf()看起来像我正在寻找的结构.我希望此功能有条件地覆盖默认注册.
class CommonRegistrations
{
public virtual void Register(ContainderBuilder builder)
{
builder.Register(ctx => LoadSettings()).As<ISettings>().SingleInstance();
builder.RegisterType<DefaultFoo>().As<IFoo>();
}
}
class SpecificRegistrations : CommonRegistrations
{
public virtual void Register(ContainerBuilder builder)
{
base.Register(builder);
builder.ConditionalyRegister(
ctx => ctx.Resolve<ISettings>().ReallyUseSpecificFoo,
ctx => new SpecificFoo()).As<IFoo>();
}
}
...
var builder = new ContainerBuilder();
var registrations = new SpecificRegistrations();
registrations.Register(builder);
var container = builder.Build();
IFoo foo = container.Resolve<IFoo>();
Run Code Online (Sandbox Code Playgroud)
foo将根据ISettings.ReallyUseSpecificFoo实例DefaultFoo或实例SpecificFoo.
谢谢.