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);
そして、私は以前と同じ例外で戻ってきました...