AddTransient с зависимостью - PullRequest
1 голос
/ 18 марта 2019

Пожалуйста, смотрите код ниже:

var services = new ServiceCollection()

.AddTransient<OtherService, OtherService>()
.AddTransient<ProductService, ProductService>(sp =>
{
    Guid Id = Guid.Parse(configuration["Id"]);
        return new Product(Id, new OtherService());
}

Это работает как ожидалось. Можно ли сделать что-то вроде этого:

var services = new ServiceCollection()

.AddTransient<OtherService, OtherService>()
.AddTransient<ProductService, ProductService>(sp =>
{
    var otherService = GetService<OtherService>();
    Guid Id = Guid.Parse(configuration["Id"]);
        return new Product(Id, otherService);
}

Как правильно это сделать? Это консольное приложение .NET Core.

1 Ответ

2 голосов
/ 18 марта 2019

Вы перегружены методом AddTransient, который дает вам параметр sp, который является экземпляром IServiceProvider:

var services = new ServiceCollection()

.AddTransient<OtherService, OtherService>()
.AddTransient<ProductService, ProductService>(sp =>
{
    var otherService = sp.GetService<OtherService>();
                     //^^ <---this
    Guid Id = Guid.Parse(configuration["Id"]);
    return new Product(Id, otherService);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...