Кто-нибудь может придумать хорошее решение для встраивания IOC в консольное приложение?
На данный момент мы просто используем статический класс со следующим методом:
public static T Resolve<T>()
{
return dependencyResolver.Resolve<T>();
}
Я хотел бы, чтобы опыт был безупречным, но не могу придумать, как добиться этого с помощью консольного приложения.





Я без проблем использовал Spring.NET из консольного приложения. Вам просто нужно указать его на свой файл конфигурации, и он подключит все зависимости. То, что вы затем делать с этими объектами, конечно же, зависит от того, что пытается сделать ваше консольное приложение.
Оформить заказ Microsoft Единство.
Консольные приложения не имеют ограничений по веб-приложениям или формам для IoC. Вы можете использовать любой на ваш выбор (Spring, Ninject, Unity и т. д.). Большинство из них можно настроить с помощью файла XML вне вашего консольного приложения, а некоторые, например Ninjector, требуют настройки внутри вашего приложения.
Вам нужно будет где-нибудь вызвать в службу поиска (Resolve<T>()). Уловка состоит в том, чтобы убрать его с дороги, насколько это возможно. Для консольных приложений эта загрузка происходит методом Main(). Сделайте это там и сведите к минимуму эти вызовы Resolve в другом месте, и все будет в порядке. Для большинства зависимостей используйте внедрение конструктора.
вызовите его напрямую из контейнера ... если у вас нет причины скрыть это.
@MattHinze Считается ли это антипаттерном даже в консольном приложении?
Вы вызываете метод Resolve <T> () непосредственно из контейнера IoC или используете оболочку, чтобы скрыть контейнер IoC от консольного приложения?