我想为我的 Open Generic ICommandHandler 创建一个基于 T 的 keyedService。当 ICommandHandler 有一个继承自 ConsultantCommand 的 T 时,我想注册一个 ConsultatCommandHanlder 键控服务
知道怎么做吗?或者如果它甚至可能?我是 AutoFac 的新手并且正在苦苦挣扎。
我目前正在像这样注册 CommandHandler:
//Register All Command Handlers
builder.RegisterAssemblyTypes(assemblies)
.As(
t =>
t.GetInterfaces()
.Where(a => a.IsClosedTypeOf(typeof (ICommandHandler<>)))
.Select(a => new KeyedService("commandHandler", a))).InstancePerHttpRequest();
如果可能的话,我猜我必须在获得 Closed Type 时识别 CommandHandlers,并以某种方式识别 Command 实现 ConsultantCommand 的那些。
我试过了:
builder.RegisterAssemblyTypes(assemblies)
.As(
t =>
t.GetInterfaces()
.Where(a => a.IsClosedTypeOf(typeof(ICommandHandler<>)) &&
a.GetGenericArguments()[0].IsSubclassOf(typeof(ConsultantCommand)))
.Select(a => new KeyedService("ConsultantCommandHandler", a))).InstancePerHttpRequest();
但不是喜悦似乎不起作用。它可以编译,但现在没有注册 CommandHandlers,即使是那些继承自 ConsultantCommand 的。我认为我的语法都是错误的