IOC для консольного приложения?

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
0
6 605
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Оформить заказ Microsoft Единство.

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

Ответ принят как подходящий

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

Вы вызываете метод Resolve <T> () непосредственно из контейнера IoC или используете оболочку, чтобы скрыть контейнер IoC от консольного приложения?

Rookian 22.03.2012 02:17

вызовите его напрямую из контейнера ... если у вас нет причины скрыть это.

Matt Hinze 04.04.2012 18:52

@MattHinze Считается ли это антипаттерном даже в консольном приложении?

Rushino 14.03.2013 20:03

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