我想在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);我回来的时候和以前一样.
发布于 2009-06-22 19:56:42
这是一个错误
发布于 2009-06-18 04:50:13
统一将选择参数最多的构造函数,因此您有几个选项:
1)使用配置指定使用no arg构造函数,如下所示:
Container.Configure<InjectedMembers>()
    .ConfigureInjectionFor<MyService>(new InjectionConstructor());2)注释你的对象
public class MyService
{
    [InjectionConstructor]
    public MyService()
    {
    }
    public MyService(int arg1)
    {     
    }
}3)使用您自己的DefaultUnityConstructorSelectorPolicy覆盖它,如果它存在的话,它将选择no构造函数。
发布于 2009-06-11 17:11:29
使用InjectionConstructor属性,如描述的这里。
https://stackoverflow.com/questions/982311
复制相似问题