Проблема, с которой я столкнулся: у меня есть класс Factory, который имеет список «Writer», «Writer» - абстрактный класс (пока). Я создал несколько классов, которые реализуют класс «Writer». Будет ли способ автоматически добавлять производные классы в список в классе Factory? Либо один, либо как Тип. Предпочтительно без необходимости писать код в производные классы (например, необходимость реализовать метод) и предпочтительно без вызова метода (особенно для каждого отдельного производного класса).автоматически добавляет класс-класс к заводскому классу при инициализации
Демо/образец:
interface IWriter {
void Write(string text);
}
class BlockWriter : IWriter {
//something like this maybe, only this only calls on use of the class so it doesn't work...
//static BlockWriter() {
// Factory.Add(new BlockWriter());
//}
public void Write(string text) {
Console.WriteLine("Block: " + text);
}
}
class Factory {
private static List<IWriter> writers = new List<IWriter>();
public static List<IWriter> GetWriters() { return writers; }
// I don't want to have to write every single one down like this.
// I want a way to do this automatically, like withing the derived classes.
public static void Build() {
writers.Add(new BlockWriter());
writers.Add(new ColumnWriter());
writers.Add(new LineWriter());
writers.Add(new SpiralWriter());
writers.Add(new WaveWriter());
}
static Factory() {
Build();
}
public static IWriter ChooseWriter(string input) {
foreach (IWriter w in writers)
if (w.GetType().Name.Equals(input))
return w;
return null;
}
}
Вы смотрели в MEF на всех? – BradleyDotNET
Не совсем, я не уверен, что это такое ... Я сделал быстрый поиск, но я не уверен, как это работает ... – Ken
Похоже, вы хотите MEF; Я сделал заводы с этим, но мой подход, скорее всего, нарушит ваши требования. Не могли бы вы разместить несколько примеров кода, как вы хотите * использовать * завод? – BradleyDotNET