Autofac键控/命名方法不提供服务映射功能的重载

时间:2019-06-04 18:36:29

标签: c# autofac

As方法提供了一个带有Func<Type, Type> serviceMapping参数的重载,但是KeyedNamed方法却没有。它们分别仅提供Func<Type, object> serviceKeyMappingFunc<Type, string> serviceNameMapping参数。

但是,我想使用所有类型的相同键向RegisterAssemblyTypes注册一组类型,但使用由类型本身确定的不同接口。我期望找到一种方法重载,例如Keyed(object serviceKey, Func<Type, Type> serviceMapping)Keyed(Func<Type, object> serviceKeyMapping, Func<Type, Type> serviceMapping)

这是API设计的疏忽吗?还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

该API似乎没有这种功能。但是,您可以将As(Func<Type, Service> serviceMapping)重载与KeyedService对象一起使用。

例如

builder.RegisterAssemblyTypes(typeof(Parent).Assembly)
        .Where(t => t.IsAssignableTo<ICommon>())
        .As(t => new KeyedService(keyObject, t.GetType().GetInterfaces()[0]));

KeyedServiceAutofac.Core命名空间中。没有NamedService对象,但是您可以将KeyedServicestring

一起使用