Ich bin mit Unity injizieren und wie folgt aus:Unity injizieren PerRequestLifetimeManager mit Hintergrundaufgaben?
container.RegisterType<IDbContextFactory, DbContextFactory>(new PerRequestLifetimeManager());
container.RegisterType<IRepository<Log>, Repository<Log>>();
//....other repositories here...
container.RegisterType<ILogService, LogService>();
//...other services here...
Und ich habe eine Aufgabe Klasse wie:
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);
}
}
und verwenden container.Resolve Methode eine MyTaskClass Instanz zu erstellen, aber es wird kommen Fehler, dass zwei Tasks denselben dbcontext verwenden, der von DbContextFactory erzeugt wurde, wegen des PerRequestLifetimeManagers, wenn ich eine andere Instanz von dbcontext by unity erstellen möchte, also muss ich einen anderen lifetimemanager von IDbContextFactory registrieren?
Dank
Wenn Ihre Fabrik immer dieselbe Instanz zurückgibt, handelt es sich nicht um eine Fabrik –