Я использую 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 минуты.