Kontext: Owin (self-host) + WebAPI + UseAutofacMiddleware + UseAutofacWebApiVerwalten Lebensdauer Scopes mit Autofac
Was ich versuche zu tun:
Registrieren Sie eine ILog
Instanz in den App Start Containern.
Registrieren Sie für jede Anfrage eine neue ILog
Instanz, die die "root" -Instanz umhüllt, sodass jede Middleware- und/oder pro-Anfrage-Dienste sie verwenden können.
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterInstance(log).As<ILog>();
containerBuilder.Register(ctx => {
var rootLog = ctx.Resolve<ILog>();
return new PrependStringLog(rootLog, "request: ");
}).InstancePerRequest();
jedoch beschwert Autofac über zirkuläre Abhängigkeiten beim Instanzieren Middleware ein ILog
in ihrer Konstruktoren aufweist.
Wenn ich das "root log" nenne und mit dem gegebenen Namen auflösen, funktioniert alles wie erwartet.
containerBuilder.RegisterInstance(log)
.Named("root", typeof(ILog));
containerBuilder.Register(ctx => {
var rootLog = ctx.ResolveNamed<ILog>("root");
return new PrependStringLog(rootLog, "request: ");
}).InstancePerRequest();
Muss ich eine benannte Instanz verwenden, damit es funktioniert?
In meinem Kopf, mit unterschiedlicher Lebensdauer Tive genug war, um die Auflösung Mechanismus zu erleichtern. Immerhin hat der per-request-Bereich einen übergeordneten Bereich, in dem es bereits eine perfekt gültige ILog-Instanz gibt, und das wäre eine zirkuläre Abhängigkeit. Davon abgesehen verstehe ich Ihre Argumentation, ich werde weiterbenannte Instanzen verwenden. – Raine