Autofac 3.5 と MediatR を使用して、特定のインターフェイスを実装する閉じた型にデコレータを適用しようとしています。次のハンドラータイプがあります。
class ABCQueryHandler: IRequestHandler<GetBankStatementLinesQuery, BankStatementLine>
そして、IRequestHandler<,> を実装するすべての型に、次の一般的なオープン デコレータ型を適用したいと思います。
class LoggingHandler<TRequest, TResponse> : IRequestHandler<TRequest, TResponse>
where TRequest : IRequest<TResponse>
私のAutofac構成は次のとおりです。
builder
.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.As(type => type.GetInterfaces()
.Where(t => t.IsClosedTypeOf(typeof(IRequestHandler<,>)))
.Select(t => new KeyedService("requestHandler", typeof(IRequestHandler<,>))))
.InstancePerLifetimeScope();
builder.RegisterGenericDecorator(typeof(LoggingHandler<,>), typeof(IRequestHandler<,>), fromKey: "requestHandler")
.InstancePerLifetimeScope();
閉じた型は注入されますが、LoggingHandler で装飾されることはありません。ここで何が欠けているのかわかりません。Autofac でのオープン ジェネリック登録のためにオープン ジェネリック デコレータを登録する方法は?に従っていくつかのアプローチを試しました。またはAutoFac - 開いている Generic の一部にデコレータを登録しますが、どれもうまくいきません。