2009-06-11 87 views
0

我想使用与团结拦截,这里是我的代码:团结拦截和构造

UnityContainer container = new UnityContainer(); 
container.AddNewExtension<Interception>(); 
container.RegisterType<T, T>(); 
container.Configure<Interception>().SetDefaultInterceptorFor<T>(new VirtualMethodInterceptor()); 
return container.Resolve<T>(); 

如果T是带有参数的构造函数的类(一个空的构造函数)抛出一个异常时,我打电话解决,否则它的作品。 如何拦截一个非空构造函数的类型?

更新

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); 

而我回来的相同的异常如前面...

回答

1

这是一个bug

0

使用InjectionConstructor属性如描述here

+0

我不想注入什么,我只是想创建它将调用T. – 2009-06-11 17:21:57

1

统一将挑选最参数的构造函数,所以你有几种选择:

1)使用配置为:使用无参数的构造函数,像这样:

Container.Configure<InjectedMembers>() 
    .ConfigureInjectionFor<MyService>(new InjectionConstructor()); 

2)标注您的反对

public class MyService 
{ 
    [InjectionConstructor] 
    public MyService() 
    { 
    } 

    public MyService(int arg1) 
    {  
    } 
} 

3)覆盖与自己的是选择了无参数的构造函数,如果它存在的DefaultUnityConstructorSelectorPolicy。

+0

它的工作原理的空构造拦截器,但如果我想使用的MyService(INT ARG1) ,它抛出(看我的问题,我已经更新) – 2009-06-18 08:28:58