我使用Unity注入并且像这样:
container.RegisterType<IDbContextFactory, DbContextFactory>(new PerRequestLifetimeManager());
container.RegisterType<IRepository<Log>, Repository<Log>>();
//....other repositories here...
container.RegisterType<ILogService, LogService>();
//...other services here...
我有一个类似的任务类:
public class MyTaskClass
{
LogService logService;
public MyTaskClass(LogService logService)
{
this.logService = logService;
}
async void ExecuteTasks()
{
Task t1 = Task.Factory.StartNew(() =>
{
logService.Write("Test");
});
Task t2 = Task.Factory.StartNew(() =>
{
logService.Write("Test");
});
await Task.WhenAll(t1, t2);
}
}
并使用container.Resolve方法创建一个MyTaskClass实例,但是由于PerRequestLifetimeManager,两个任务使用由DbContextFactory生成的相同dbcontext会发生错误,如果我想通过unity创建不同的dbcontext实例,那么我必须注册不同的终身经理IDbContextFactory?
由于
答案 0 :(得分:0)
如果你只是没有指定LifetimeManager,或者使用TransientLifetimeManager
这是默认设置,那么它会起作用。每个解析都将返回一个新实例。在开始任务之前,您可以使用它,并使用方法工厂的组合(在Func<LogService>
类中注入A MyTaskClass
),因此每个任务都会有不同的DbContext
。< / p>