Как я могу объединить интерфейсы с динамическим прокси замка

Я хотел бы разрешить декларативное управление миксинами в моей кодовой базе. Я хотел бы объявить интерфейс, подобный

public interface IMyRepo : IRepository, ICanFindPeopleByName, ICantSing {}

, поэтому мои классы могут использовать только те биты уровня доступа к данным, которые им нужны. В моем контейнере IoC я хотел бы объединить реализации этих интерфейсов в один экземпляр. Однако, когда я делаю вещи, похожие на потоки, на которые ссылаются, генератор генерирует исключение, утверждая, что интерфейсы реализованы в нескольких местах. Что мне делать, кроме реализации моего собственного перехватчика и прохождения через него?

Соответствующие темы:


Лучший пример (стена кода)

public interface IIceCream {
    void Eat();
}
public class IceCream : IIceCream {
    public void Eat() { Console.WriteLine("Yummy!"); }
}
public interface ICake {
    void NomNom();
}
public class Cake : ICake {
    public void NomNom() { Console.WriteLine("Cakey!"); }
}
public interface ISprinkles {
    void Oogle();
}
public class Sprinkles : ISprinkles {
    public void Oogle(){ Console.WriteLine("Its Pretty!");}
}

public interface IIceCreamWithCakeAndSprinkles : IIceCream, ICake, ISprinkles {}

public class Program
{
    public static void Main()
    {
        var gen = new ProxyGenerator();
        var options = new ProxyGenerationOptions();

        options.AddMixinInstance(new IceCream());
        options.AddMixinInstance(new Cake());
        options.AddMixinInstance(new Sprinkles());

        var result =
            gen.CreateClassProxy(typeof (object), new[] {typeof (IIceCreamWithCakeAndSprinkles)}, options) as IIceCreamWithCakeAndSprinkles;

    }
}

throws

InvalidMixinConfigurationException: "The mixin IceCream adds the interface 'ConsoleApplication1.IIceCream' to the generated proxy, but the interface already exists in the proxy's additional interfaces. A mixin cannot add an interface already implemented in another way."

1
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Обновление до Dynamic Proxy 2.2 или 2.5 Он более разрешительный и позволит миксину владеть интерфейсом и игнорировать, что он был передан снова как "дополнительный интерфейс".

2
ответ дан 2 September 2019 в 22:17
поделиться