Создается несколько экземпляров Ninject Singleton - PullRequest
0 голосов
/ 22 февраля 2019

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

Привязка Ninject


List<Assembly> assemblies = new List<Assembly> {
    typeof(DbContext).Assembly, // DataAccess
    typeof(ILogger).Assembly, // Infrastructure
    typeof(NullHelpers).Assembly, // Library
    typeof(Repository<>).Assembly, // Repository
    typeof(Logger).Assembly, // Service
    typeof(NinjectRegistrator).Assembly, // This project
    GuiAssembly, // The GUI project
};

kernel.Bind(x => x
    .From(assemblies)
    .Select(type => type.IsClass && !type.IsAbstract)
    .BindDefaultInterface()
    .Configure(b => b.InSingletonScope())
);

Как вы можете видеть, я сильно полагаюсь на Ninject и его привязку по умолчанию: ISearchRepository автоматически сопоставляется с SearchRepository и т. Д.

Введенный класс

public class SearchRepository : ISearchRepository
{
    private readonly ISettingRepository _settingRepository;
    public SearchRepository(ISettingRepository settingRepo)
    {
        Console.WriteLine("new class created");
        _settingRepository = settingRepo;
    }
}

То, что я вижу в своем журнале, - это "новый класс создан", выводимый много раз очень близко друг к другу.Это приложение коммерческого уровня, и одновременно существует несколько потоков, использующих этот репозиторий.Большую часть времени он работает нормально, но будут волны, когда этот объект, по-видимому, располагается и строится несколько раз за 1-2 минуты.

...