В последнее время я изучал методы внедрения зависимостей и инверсии управления, пытаясь улучшить архитектуру нашей прикладной среды, и я не могу найти хорошего ответа на этот вопрос.Весьма вероятно, что моя терминология запутана, перепутана или что я просто наивен в отношении концепции прямо сейчас, поэтому любые ссылки или разъяснения приветствуются.
Многие примеры контейнеров DI и IoC не• Проиллюстрируйте, как контейнер будет связывать вещи вместе, когда у вас есть «библиотека» возможных «плагинов», или как «сериализовать» заданную конфигурацию.(Из того, что я читал о MEF, наличие нескольких объявлений [Export] для одного и того же типа не будет работать, если для вашего объекта требуется только 1 [Import]).Может быть, это другой шаблон или я ослеплен моим текущим мышлением.
Вот пример кода для примера:
public abstract class Engine {
}
public class FastEngine : Engine {
}
public class MediumEngine : Engine {
}
public class SlowEngine : Engine {
}
public class Car
{
public Car(Engine e)
{
engine = e;
}
private Engine engine;
}
В этом посте говорится о "детализированном контексте"где 2 экземпляра одного и того же объекта нуждаются в различных реализациях класса Engine: IoC.Resolve vs Constructor Injection
Существует ли хорошая структура, которая помогает вам конфигурировать или сериализовать конфигурацию для достижениячто-то вроде этого без жесткого кодирования или ручного свертывания кода для этого?
public class Application
{
public void Go()
{
Car c1 = new Car(new FastEngine());
Car c2 = new Car(new SlowEngine());
}
}
Пример XML:
<XML>
<Cars>
<Car name="c1" engine="FastEngine" />
<Car name="c2" engine="SlowEngine" />
</Cars>
</XML>