帮助迁移混入从Castle.DynamicProxy到DynamicProxy2(Help Migr

2019-10-21 04:47发布

我试图使用DynamicProxy到DynamicProxy2更新一些代码。 特别是我们在哪里使用DynamicProxy提供两种类型的混入。 安装程序是这样的:

public interface IHasShape
{
    string Shape { get; }
}

public interface IHasColor
{
    string Color { get; }
}

public interface IColoredShape : IHasShape, IHasColor
{
}

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

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并不能找到等价实现。

Answer 1:

OK,所以如果我理解正确的话,你有实现两个接口,并实现两者的另一个接口,并且希望下一个3混合这两种接口的实现,是否正确?

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;
}


文章来源: Help Migrating mixins from Castle.DynamicProxy to DynamicProxy2