Служба, введенная при запуске, не указана в конфигурации службы расширений как ядро ​​pnet - PullRequest
0 голосов
/ 23 января 2020

Служба, введенная при запуске, в конфигурации службы расширений равна нулю, как pnet core. У нас есть одна служба для userservice для сохранения профиля пользователя, и она вводится как область действия при запуске. В нашем расширении мы добавляем еще один сервис для студентов как синглтон для вставки обновлений и удаления транзакций пользователей. Мы хотим получить информацию об ученике из userservice, но в нашем сервисе для студентов она имеет нулевое значение.

При запуске.

services.AddMemoryCache();
services.AddSingleton<ITempDataProvider,
    CookieTempDataProvider>();
services.TryAddSingleton<IHttpContextAccessor,
    HttpContextAccessor>();
services.AddScoped<IUserService, UserService>();

В добавочном номере

public void Execute(IServiceCollection serviceCollection, IServiceProvider serviceProvider)
{

    serviceCollection.AddMvc();

    serviceCollection.AddSingleton<IStudenService, StudenService>();
}

В службе учащихся

public class StudentSerivce : IStudentSerivce
{


    private readonly IUserService _userService;

    public StudentSerivce(IUserService userService)
    {

        _userService = userService; // is null

    }
}

1 Ответ

0 голосов
/ 23 января 2020

Вы можете попробовать это:

public StudentService(IServiceProvider services)
{
    Services = services;
}

public IServiceProvider Services { get; }

public void SomeMethod()
{
    using (var scope = Services.CreateScope())
    {
        var userService = scope.ServiceProvider.GetRequiredService<IUserService>();
        // Do Something
    }
}

Вероятно, было бы лучше сделать так, чтобы они оба имели объем или оба синглета (тогда это работало бы без создания области видимости вручную).

Опасно разрешать сервис с одной областью из одной области. Это может привести к неправильному состоянию службы при обработке последующих запросов.

Ссылка: Внедрение зависимостей в ASP. NET Core

...