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

Autofac 通过RegisterType()或RegisterAssemblyTypes()注册时,按键/名称选择依赖项?,autofac,Autofac,在使用Autofac的场景中,当使用RegisterType()或RegisterAssemblyTypes()注册类型(使用refection查找适当的构造函数)时,是否有方法指定其依赖项之一使用键控/命名服务?理想情况下,我想做这样的事情: builder.RegisterType<ServiceA>(); ... public class ServiceA { public ServiceA([ByName("online")] IDependencyB depen

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

builder.RegisterType<ServiceA>();

...

public class ServiceA
{
    public ServiceA([ByName("online")] IDependencyB dependencyB, ...)
    { ... }
}
builder.RegisterType();
...
公共类服务
{
公共服务A([别名(“在线”)]IDependencyB dependencyB,…)
{ ... }
}
如果没有,那么将其添加到Autofac中如何:

  • 实施起来有多复杂?(我只是很肤浅地看了一下Autofac源代码。)
  • 指定这样的依赖项是一个好的设计吗?有更好的办法吗
  • 这对其他人来说是有用的功能吗

    • 没有我希望的那么容易发现,但是:

      builder.RegisterType<ServiceA>()
         .WithParameter(
            (pi, c) => pi.Name == "dependencyB",
            (pi, c) => c.ResolveNamed<IDependencyB>("online"));
      
      builder.RegisterType()
      .带参数(
      (pi,c)=>pi.Name==“dependencyB”,
      (pi,c)=>c.com(“在线”);
      
      我们在过去已经研究过简化,但是这个场景的变化数量相当大。此方法使用最为熟悉的API(System.Reflection和“Resolve…()”)涵盖所有这些API