Unity 2拦截等效于Castle Dynamic Proxy中的CreateInterfaceProxyWithoutTarget

时间:2011-02-02 10:03:10

标签: unity-container interceptor

我想对没有实现的接口使用Unity拦截,以便IInterceptionBehavior实际上成为实现。这与Castle Dynamic Proxy中的CreateInterfaceProxyWithoutTarget方法相同。

这在Unity中是否可行?

2 个答案:

答案 0 :(得分:3)

我认为不,我知道拦截界面的唯一方法是使用InterfaceInterceptor but it requires a base class to be registered in the container

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

答案 1 :(得分: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