Вопрос

Кто-нибудь может придумать хорошее решение для вставки IOC в консольное приложение?

В данный момент мы просто используем статический класс со следующим методом:

public static T Resolve<T>()
{
    return dependencyResolver.Resolve<T>();
}

Я бы хотел, чтобы опыт был беспроблемным, но я не могу придумать, как этого добиться с помощью консольного приложения.

Это было полезно?

Решение

Вам нужно будет где-нибудь позвонить в службу поддержки (Resolve<T>()). Хитрость заключается в том, чтобы сделать это как можно дальше. Для консольных приложений такая загрузка происходит в методе Main(). Сделайте это там и минимизируйте эти звонки Resolve в другом месте, и вы будете великолепны. Для большинства зависимостей используйте инъекцию конструктора.

Другие советы

Консольные приложения не имеют никаких ограничений по сравнению с веб-приложениями или приложениями для IoC. Вы можете использовать любой по вашему выбору (Spring, Ninject, Unity и т. Д.). Большинство из них настраиваются с помощью XML-файла за пределами вашего консольного приложения, а некоторые, такие как Ninjector, требуют настройки внутри вашего приложения.

Я использовал Spring.NET из консольного приложения без проблем. Вам просто нужно указать его в вашем конфигурационном файле, и он подключит все зависимости. То, что вы затем делаете с этими объектами, зависит, конечно, от того, что пытается сделать ваше консольное приложение.

Оформить заказ Microsoft Unity .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top