Возможно ли зарегистрировать компонент условно в другом состоянии компонента? Что-то вроде:
ContainerBuilder.RegisterConditionally<T>(
Func<IComponentContext, bool>,
Func<IComponentContext, T>);
Я обнаружил, что до V2 autofac можно было использовать конструкцию "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>();
foo будет соответствовать ISettings.ReallyUseSpecificFoo
любому экземпляру DefaultFoo
или экземпляру SpecificFoo
.
Спасибо.