我想在 Unity 中使用拦截,这是我的代码:
UnityContainer container = new UnityContainer();
container.AddNewExtension<Interception>();
container.RegisterType<T, T>();
container.Configure<Interception>().SetDefaultInterceptorFor<T>(new VirtualMethodInterceptor());
return container.Resolve<T>();
如果 T 是一个带有带参数的构造函数的类(一个空的构造函数),当我调用 Resolve 时会引发异常,否则它会起作用。如何拦截具有非空构造函数的类型?
更新
UnityContainer container = new UnityContainer();
container.AddNewExtension<Interception>();
container.RegisterType<T, T>();
container.Configure<InjectedMembers>().ConfigureInjectionFor<T>(new InjectionConstructor());
container.Configure<Interception>().SetDefaultInterceptorFor<T>(new VirtualMethodInterceptor());
return container.Resolve<T>();
此代码有效,但如果我想使用带参数的构造函数怎么办?
我试过这个:
public static T Resolve<T>(object param)
{
UnityContainer container = new UnityContainer();
container.AddNewExtension<Interception>();
container.RegisterType<T, T>();
container.Configure<InjectedMembers>().ConfigureInjectionFor<T>(new InjectionConstructor(param));
container.Configure<Interception>().SetDefaultInterceptorFor<T>(new VirtualMethodInterceptor());
return container.Resolve<T>();
}
在我的代码中:
var service = Resolve<MyService>(4);
我回来了,和之前一样的例外......