Помогите перенести миксины из Castle.DynamicProxy в DynamicProxy2 - PullRequest
1 голос
/ 17 апреля 2010

Я пытаюсь обновить код с помощью 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 и делегирует их объектам «shape» или «color» в зависимости от ситуации.

Однако я поигрался с новым DynamicProxy2 и не могу найти эквивалентную реализацию.

1 Ответ

3 голосов
/ 17 апреля 2010

ОК, так что, если я правильно вас понимаю, у вас есть два интерфейса с реализациями, и еще один интерфейс, который реализует оба из них, и вы хотите смешать реализации этих двух интерфейсов с третьим, правильно?

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