1

DynamicProxy を使用するコードを DynamicProxy2 に更新しようとしています。特に、DynamicProxy を使用して 2 つのクラスの mixin を提供しています。セットアップは次のようなものです。

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 オブジェクトの呼び出しを受け取り、必要に応じて「shape」または「color」オブジェクトに委任します。

しかし、私は新しい DynamicProxy2 をいじっていて、同等の実装を見つけることができません。

4

1 に答える 1

3

OK、あなたが正しく理解していれば、実装を備えた 2 つのインターフェイスと、それらの両方を実装する別のインターフェイスがあり、これら 2 つのインターフェイスの実装を 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;
}
于 2010-04-17T06:30:52.077 に答える