C# 是否可以使用Autofac组件扫描为多个键注册一种类型?

C# 是否可以使用Autofac组件扫描为多个键注册一种类型?,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,我正在尝试在AutoFac中注册多个键(即3、4、5)的类型(即MyClass)。 因此,componentContext.resolvedkeyed(3),componentContext.resolvedkeyed(4)和componentContext.resolvedkeyed(5)都返回MyClass实例。 我不知道该怎么做,因为Keyed()需要类型而不是值 builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())

我正在尝试在AutoFac中注册多个键(即3、4、5)的类型(即
MyClass
)。 因此,
componentContext.resolvedkeyed(3)
componentContext.resolvedkeyed(4)
componentContext.resolvedkeyed(5)
都返回
MyClass
实例。 我不知道该怎么做,因为
Keyed()
需要类型而不是值

builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
            .Where(type => type.IsAssignableTo<IMyClass>())
            .Keyed<IMyClass>(type => type.GetCustomAttribute<MyCustomAttribute>().VALUES)
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();

[MyCustomAttribute(3, 4, 5)]
class MyClass : IMyClass { }

class MyCustomAttribute : Attribute {
    public int[] VALUES { get; set; }

    public MyCustomAttribute(params int[] values) {
       this.Values = values;
    }
}
builder.RegisterAssemblyTypes(Assembly.getExecutionGassembly())
.Where(type=>type.IsAssignableTo())
.Keyed(type=>type.GetCustomAttribute().VALUES)
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
[MyCustomAttribute(3,4,5)]
类MyClass:IMyClass{}
类MyCustomAttribute:属性{
公共int[]值{get;set;}
公共MyCustomAttribute(参数int[]值){
这个。值=值;
}
}

这在Autofac core中不受支持,但您可以很容易地创建一个扩展方法来为您实现这一点

公共静态IRegistrationBuilder
键控(
此IRegistrationBuilder注册,
Func serviceKeyMapping)
{
var serviceType=typeof(t服务);
申报登记
.AssignableTo(服务类型)
.As(t=>serviceKeyMapping(t).Select(key=>newKeyedService(key,serviceType));
}
这应该是一个大概的下降,以取代你正在尝试做的事情

通过将Autofac用作许多工作示例的起点,可以很容易地扩展这种方式。我放在这里的是一个非常轻微的修改,因为不是每个用例都可以被覆盖,这是填补这样空白的“官方解决方案”