ASP.NET Core: DI Сервис с условиями - PullRequest
0 голосов
/ 14 мая 2019

Я хочу зарегистрировать мой класс обслуживания ADManager в автозагрузке.Но у класса в конструкторе есть строковые параметры, и создание экземпляра зависит от того, находится ли пользователь в том же домене, что и веб-приложение.

// Constructor
public ADManager(
    string ADDomain, bool isSameDomain = true,
    string username = null, string password = null) 

Вот как я делаю экземпляр класса вручную, еслиэто тот же домен:

var adManager = new ADManager(_authenticationSettings.AdDomain, _isSameDomain);

Но если _isSameDomain равен false, его необходимо создать следующим образом:

var adManager = new ADManager(
    _authenticationSettings.AdDomain, _isSameDomain, Input.Username, Input.Password);

1 Ответ

1 голос
/ 14 мая 2019

Вам необходимо использовать заводскую перегрузку AddScoped.Лямбда, которую вы передаете в качестве фабрики, будет запускаться каждый раз при создании экземпляра службы, который в течение срока службы будет примерно соответствовать каждому запросу.всегда будет связанным запросом, будет возможно, в зависимости от того, как вы используете сервис, что он будет работать вне конвейера запросов.Например, если вы попытались вытащить его в синглтоне:

using (var scope = _serviceProvider.CreateScope())
{
    var adManager = scope.ServiceProvider.GetRequiredService<ADManager>();
    // HttpContext could be null in this scope
}
...