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

основано на Что нового в EF Core 2.0 - EF Core | Документы Microsoft

Если вы хотите новый контекст один раз для каждого запроса: AddDbContext

public void ConfigureServices(IServiceCollection services)
{
 services.AddDbContext(
     options => options.UseSqlServer(connectionString));
 }

, тогда вы можете

public class TiketsController : ControllerBase
{
    private readonly MCContext _context;

    public TiketsController (MCContext context)
    {
        _context = context;
    }
 }

Базовый шаблон для использование EF Core в приложении ASP.NET Core обычно включает в себя регистрацию пользовательского типа DbContext в системе внедрения зависимостей и последующее получение экземпляров этого типа через параметры конструктора в контроллерах. Это означает, что для каждого запроса создается новый экземпляр DbContext.

blockquote>

, но если вам требуется высокая производительность / безопасное повторное использование: AddDbContextPool

public void ConfigureServices(IServiceCollection services)
{
 services.AddDbContextPool(
     options => options.UseSqlServer(connectionString));
 }

, тогда вы можете

public class TiketsController : ControllerBase
{
    private readonly MCContext _context;

    public TiketsController (MCContext context)
    {
        _context = context;
    }
 }

Если этот метод используется, на Когда контроллер запрашивает экземпляр DbContext, мы сначала проверим, есть ли экземпляр в пуле. Как только обработка запроса завершается, любое состояние в экземпляре сбрасывается, и сам экземпляр возвращается в пул.

BLOCKQUOTE>

12
задан Matt Hinze 18 January 2009 в 14:02
поделиться

4 ответа

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

7
ответ дан 2 December 2019 в 21:45
поделиться

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

3
ответ дан 2 December 2019 в 21:45
поделиться

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

1
ответ дан 2 December 2019 в 21:45
поделиться

Контроль Microsoft Unity.

1
ответ дан 2 December 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: