我的项目是由服务和存储库组成的结构(所有存储库共享db上下文)。在我的一个服务层中,我有一个异步方法,使用存储库将数据写入数据库。Web请求将完成并且在该方法可以使用之前处置上下文。我尝试理解NamedScopes,如此answer所述。我仍然无法理解如何实现它。我将展示我的项目结构,并希望有人能在代码层面上帮助我。
绑定
private static void RegisterServices(IKernel kernel)
{
//dbcontext
kernel.Bind<EntityDatabaseContext>().ToMethod(context => new EntityDatabaseContext()).InRequestScope();
//unit of work
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
//repositories
kernel.Bind<IRepository<Account>>().To<Repository<Account>>().InRequestScope();
//services
kernel.Bind<IAuthenticationService>().To<AuthenticationService>().InRequestScope();
}
AuthenticationService使用构造函数注入
public AuthenticationService(UnitOfWork unitOfWork, IRepository<Account> accountRepository){}
我的 AuthenticationService 中的一个方法
//this is a background process
public Task SomeMethodAsync(string text)
{
//spin it off into a new task
return Task.Factory.StartNew(() => SomeMethod(text));
}
SomeMethod
使用了accountRepository
。如果需要更多信息,请告诉我。如果NamedScopes是解决方案,如何在我的情况下实现线程安全?
基本上,正在执行后台进程,并且它正在使用由ninject由于请求范围而被处理的上下文。