小编Jan*_*vák的帖子

autofac中的条件组件注册

是否可以有条件地在其他组件的状态上注册组件?就像是:

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.

谢谢.

c# dependency-injection autofac

12
推荐指数
1
解决办法
5571
查看次数

标签 统计

autofac ×1

c# ×1

dependency-injection ×1