2011-02-02 5 views
0

Я хочу использовать перехват Unity для интерфейса без реализации, так что IInterceptionBehavior фактически становится реализацией. Это то же самое, что и метод CreateInterfaceProxyWithoutTarget в Castle Dynamic Proxy.Unity 2 эквивалент перехвата CreateInterfaceProxyWithoutTarget в замке Dynamic Proxy

Возможно ли это в единстве?

ответ

3

Я думаю, что нет, единственный способ, которым я не знаю, чтобы перехватить интерфейс с InterfaceInterceptorbut it requires a base class to be registered in the container:

Container.RegisterType<IRepository, BaseRepository>(
    "repo1", 
    new Interceptor(new InterfaceInterceptor()), 
    new InterceptionBehavior(new RepoLoggingBehavior()) 
    ); 
+0

, что это очень плохо. Благодарю. –

0

Это было долгое время, так как этот вопрос был отправлен, но я наткнулся на нее, пытаясь фигуры все так же, и хорошо, похоже, что я что-то придумал.

Я сделал это с помощью Intercept.NewInstanceWithAdditionalInterfaces. В моем примере ниже я хочу, чтобы Unity создавал экземпляр не определенного класса, реализующего IUserDao. Все, что я хочу, чтобы этот экземпляр этого класса, созданного Unity, был определен в RetrieveSavedResultBehavior.

IUserDao userDao = (IUserDao)(Intercept.NewInstanceWithAdditionalInterfaces<Object>(
      new VirtualMethodInterceptor(), 
      new List<IInterceptionBehavior>(){new RetrieveSavedResultBehavior()}, 
      new List<Type>() { typeof(IUserDao) } 
      )); 

Вы можете проверить свой пост по этой теме here