通过RegisterType()或RegisterAssemblyTypes()注册时,按键/名称选择依赖项?

时间:2011-04-28 17:22:22

标签: autofac

在我使用TypedNamedAndKeyedServices的Autofac的情况下,使用RegisterType()RegisterAssemblyTypes()注册类型(使用反射来查找适当的构造函数)时是否有办法? ,指定其中一个依赖项使用键控/命名服务?理想情况下,我想做这样的事情:

builder.RegisterType<ServiceA>();

...

public class ServiceA
{
    public ServiceA([ByName("online")] IDependencyB dependencyB, ...)
    { ... }
}

如果没有,那么如何将其添加到Autofac:

  • 实施有多复杂? (我只是非常浅薄地看过Autofac来源。)
  • 指定这样的依赖是一个好的设计吗?还有更好的方法吗?
  • 这会对其他人有用吗?

1 个答案:

答案 0 :(得分:1)

不像我想的那样可以发现,但是:

builder.RegisterType<ServiceA>()
   .WithParameter(
      (pi, c) => pi.Name == "dependencyB",
      (pi, c) => c.ResolveNamed<IDependencyB>("online"));

我们过去曾考虑过简化,但此方案的变化数量非常大。这种方法涵盖了所有这些方法,主要使用熟悉的API(System.Reflection和'Resolve ...()'。)