Unity 2 拦截相当于 Castle 动态代理中的 CreateInterfaceProxyWithoutTarget

发布于 2024-10-15 04:36:06 字数 147 浏览 7 评论 0原文

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

这在Unity中可能吗?

I want to use Unity interception for an interface without an implementation, so that the IInterceptionBehavior actually becomes the implementation. This is the same as the CreateInterfaceProxyWithoutTarget method in Castle Dynamic Proxy.

Is this possible in Unity?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

咋地 2024-10-22 04:36:06

我认为不,我知道拦截接口的唯一方法是使用 InterfaceInterceptor 但它需要在容器中注册一个基类

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

I think no, the only way I know to intercept an interface is with an 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())
    );
紅太極 2024-10-22 04:36:06

自从这个问题发布以来已经有一段时间了,但我在试图弄清楚同样的问题时遇到了它,好吧,似乎我已经想出了一些东西。

我通过使用 Intercept.NewInstanceWithAdditionalInterfaces 使其工作。
在下面的示例中,我希望 Unity 创建一个实现 IUserDao 的未定义类的实例。我希望 Unity 创建的类的实例在 RetrieveSavedResultBehavior 中定义。

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

您可以在此处查看我关于此主题的帖子

It's been a long while since this question was posted, but I came across it while trying to figure out just the same, and well, it seems like I've come up with something.

I've made it work by using Intercept.NewInstanceWithAdditionalInterfaces.
In my sample below I want a Unity to create an instance of a non defined class implementing IUserDao. All I want that instance of that Unity created class to do is defined in RetrieveSavedResultBehavior.

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

You can check my post regarding this topic here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文