OpenGenericICommandHandlerの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を取得するときにCommandHandlerを識別し、何らかの方法で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();
しかし、喜びはうまくいかないようです。コンパイルされますが、ConsultantCommandから継承するものであってもCommandHandlerは登録されません。私の構文はすべて間違っていると思います