我在应该是单例作用域的情况下使用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分钟内被多次处置和构造多次时,会产生波浪状的冲击。