Внедрение зависимостей .Net Core в консольное приложение - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь использовать внедрение зависимостей в .NET Core Console App.Об этом много статей, но я не нашел ни одной, которая решает мою проблему.Я пытаюсь использовать сервисы, исходные из основного веб-приложения aspnet, поэтому у меня есть WebHost.

Моя главная проблема - создать экземпляр моего собственного класса, все зависимости работают, и моя консольприложение запускается.

У меня есть этот код в классе моей программы:

static void Main(string[] args)
{            
    var host = WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options => options.AddServerHeader = false)
        .UseStartup<Startup>()
        .Build();

    var services = new ServiceCollection().AddLogging();            
    var container = new Container();           
    var serviceProvider = container.GetInstance<IServiceProvider>();

Этот код не будет компилироваться из-за этой ошибки: «Контейнер» не содержит определения для «GetInstance»

Как я могу создать экземпляр моего пользовательского приложения класса, который имеет эту реализацию:

public class App
{
    private readonly IProductService _productService;

    public App(IProductService productService)
    {
        _productService = productService;
    }
}

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

В этом сценарии вам даже не нужно создавать свои собственные ServiceCollection или ServiceProvider - вы можете просто использовать свойство IWebHost Services, которое у вас уже есть:

var app = host.Services.GetService<App>();

WebHost.CreateDefaultBuilder уже добавляет службы ведения журнала, поэтому делать это тоже не нужно.

Примечание: я предполагаю, что вы зарегистрировали свои App и IProductService вводит Startup.ConfigureServices.

0 голосов
/ 27 сентября 2018

Я понятия не имею, что такое «контейнер» в ваших настройках, но вы обычно создаете поставщика услуг, вызывая BuildServiceProvider на ServiceCollection.

var provider = services.BuildServiceProvider();

var instance = provider.GetService<App>();

Сначала вам нужно будет зарегистрировать как App, так и IProductService, который вы хотите, для сбора сервисов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...