我想用裝飾器包裝我的通用接口,但它根本不起作用,在我看來,從其他問題來看,做到這一點的唯一方法是通過明確地爲每個裝飾器進行操作,我的問題是關於是否有可能在ninject中包裝實現與特定Decorater的某個接口的所有類型。使用ninject的通用裝飾模式
代碼:
static void BindMediatr(IKernel kernel) {
kernel.Components.Add < IBindingResolver, ContravariantBindingResolver >();
kernel.Bind(scan => scan.FromAssemblyContaining <IMediator>()
.SelectAllClasses()
.BindDefaultInterface());
kernel.Bind <SingleInstanceFactory>().ToMethod(ctx => t => ctx.Kernel.Get(t));
kernel.Bind <MultiInstanceFactory>().ToMethod(ctx => t => ctx.Kernel.GetAll(t));
kernel.Bind(
x => x.FromThisAssembly()
.SelectAllClasses()
.InheritedFromAny(typeof(IAsyncRequestHandler < , >))
.BindAllInterfaces());
kernel.Bind(typeof(IAsyncRequestHandler < , >))
.To(typeof(Decorater < , >))
.WhenInjectedInto <ApiController>();
}
public class Decorater < TRequest, TResponse >
: IAsyncRequestHandler < TRequest, TResponse >
where TRequest: IAsyncRequest <TResponse> {
IAsyncRequestHandler < TRequest,
TResponse > _decoratee;
public Decorater(IAsyncRequestHandler < TRequest, TResponse > decoratee) {
_decoratee = decoratee;
}
public Task <TResponse> Handle(TRequest message) {
// do something here
}
}
我需要能夠得到一個調用操作的結果,這可能是某種通用的類型結果攔截似乎不提供的? –
Xerxes