Я бы хотел использовать перехват с 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);
И я вернулся с тем же исключением, что и раньше ...