Передача интерфейса другому сервису в Startup.cs ConfigureServices - PullRequest
1 голос
/ 12 апреля 2020

Мне нужно передать интерфейс в качестве параметра в конструктор другой службы.

Для конструктора MSAuthService необходимо 3 параметра:

public MSAuthService(string jwtSecret, int jwtLifespan, IUserService userService)
{
    this._jwtSecret = jwtSecret;
    this._jwtLifespan = jwtLifespan;
    this._userService = userService;
}

Startup.cs:

services.AddScoped<IUserService, UserManager>();
....
services.AddSingleton<IAuthService>(
    new MSAuthService(
        MyConfigurationManager.GetJWTSecretKey(),
        MyConfigurationManager.GetJWTLifespan(),
        // I want to pass IUserService as parameter here
        )
);

Я не мог понять, как передать IUserService в конструктор MSAuthService. Я не хочу передавать класс UserManager (конкретный) в качестве параметра.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2020

AddSingleton имеет перегрузку, которая принимает Func<IServiceProvider, TImplementation>.

. Вы можете использовать IServiceProvider для получения зарегистрированной зависимости, используя GetRequiredService:

services.AddSingleton<IAuthService>(sp =>
    new MSAuthService(
        MyConfigurationManager.GetJWTSecretKey(),
        MyConfigurationManager.GetJWTLifespan(),
        sp.GetRequiredService<IUserService>()
        )
);
1 голос
/ 12 апреля 2020

try Вы пытались использовать это на Configure методе?

var scope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope();
scope.ServiceProvider.GetService<IUserService>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...