Я хочу использовать перехват Unity для интерфейса без реализации, чтобы IInterceptionBehavior фактически стал реализацией. Это то же самое, что и метод CreateInterfaceProxyWithoutTarget в Castle Dynamic Proxy.
Возможно ли это в Unity?
Я хочу использовать перехват Unity для интерфейса без реализации, чтобы IInterceptionBehavior фактически стал реализацией. Это то же самое, что и метод CreateInterfaceProxyWithoutTarget в Castle Dynamic Proxy.
Возможно ли это в Unity?
Думаю, нет, единственный известный мне способ перехватить интерфейс — это InterfaceInterceptor
но для этого требуется зарегистрировать базовый класс в контейнере:
Container.RegisterType<IRepository, BaseRepository>(
"repo1",
new Interceptor(new InterfaceInterceptor()),
new InterceptionBehavior(new RepoLoggingBehavior())
);
Прошло много времени с тех пор, как этот вопрос был опубликован, но я наткнулся на него, пытаясь понять то же самое, и, похоже, я что-то придумал.
Я заставил это работать, используя Intercept.NewInstanceWithAdditionalInterfaces. В приведенном ниже примере я хочу, чтобы Unity создал экземпляр неопределенного класса, реализующего IUserDao. Все, что я хочу, чтобы этот экземпляр созданного Unity класса делал, определяется в RetrieveSavedResultBehavior.
IUserDao userDao = (IUserDao)(Intercept.NewInstanceWithAdditionalInterfaces<Object>(
new VirtualMethodInterceptor(),
new List<IInterceptionBehavior>(){new RetrieveSavedResultBehavior()},
new List<Type>() { typeof(IUserDao) }
));
Вы можете проверить мой пост по этой теме здесь