Я хотел бы разрешить декларативное управление миксинами в моей кодовой базе.Я хотел бы объявить интерфейс типа
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."