【问题标题】:Help Migrating mixins from Castle.DynamicProxy to DynamicProxy2帮助将 mixin 从 Castle.DynamicProxy 迁移到 DynamicProxy2
【发布时间】:2011-02-09 01:03:09
【问题描述】:

我正在尝试将一些代码从使用 DynamicProxy 更新为 DynamicProxy2。特别是我们使用 DynamicProxy 来提供两个类的混合。设置是这样的:

public interface IHasShape
{
    string Shape { get; }
}

public interface IHasColor
{
    string Color { get; }
}

public interface IColoredShape : IHasShape, IHasColor
{
}

然后假设 IHasShape 和 IHasColor 有一些明显的具体实现,我们将创建一个这样的 mixin:

public IColoredShape CreateColoredShapeMixin(IHasShape shape, IHasColor color)
{
    ProxyGenerator gen = new ProxyGenerator();
    StandardInterceptor interceptor = new StandardInterceptor();
    GeneratorContext context = new GeneratorContext();
    context.AddMiniInstance(color);

    return gen.CreateCustomProxy(typeof(IColoredShape), intercetor, shape, context);
}

IColoredShape 没有具体的实现,除非是作为代理创建的结果。 StandardInterceptor 对 IColoredShape 对象进行调用,并将它们委托给适当的“形状”或“颜色”对象。

但是,我一直在使用新的 DynamicProxy2,但找不到等效的实现。

【问题讨论】:

  • 请编辑您的问题 - 它似乎不完整。

标签: c# mixins castle-dynamicproxy


【解决方案1】:

好的,如果我理解正确,您有两个接口实现,另一个接口实现了这两个接口,您想在第三个接口下混合这两个接口的实现,对吗?

public IColoredShape CreateColoredShapeMixin(IHasShape shape, IHasColor color)
{
    var options = new ProxyGenerationOptions();
    options.AddMixinInstance(shape);
    options.AddMixinInstance(color);
    var proxy = generator.CreateClassProxy(typeof(object), new[] { typeof(IColoredShape ) }, options) as IColoredShape;
    return proxy;
}

【讨论】:

  • 是的,我想出了这么多,但仍然无法让它发挥作用。在您的示例中,根本没有使用“形状”对象。有没有简单的解决方法?
  • 形状对象应该做什么?它有什么用?
  • 我想要两个对象形状和颜色的纯混合。理想情况下,返回的代理实现一个接口,该接口是 IHasShape 和 IHasColor 的组合。这样您就可以清楚地表明代理具有 mixin 接口这一事实。在这个例子中:kozmic.pl/archive/2009/08/12/… 返回的 mixin 是一个 Person 并且没有太多迹象表明它也是一个 Dictionary,除了你可以强制转换它。我首先给出的使用 DynamicProxy1 的示例正是我所需要的。
猜你喜欢
  • 2011-05-26
  • 2019-01-11
  • 2015-11-10
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
相关资源
最近更新 更多