Ich habe ging durch die meisten der Dokumentation, und ich bin immer noch unsicher über spezifische Verwendung von Abhängigkeitstive.Mit Autofac Bereiche in WebApi2
Wenn meine Anfrage meines Controller trifft, kann ich in der Regel Abhängigkeiten des Controllers verwenden (über Constructor Injection zur Verfügung gestellt) und mich nicht viel darum kümmern.
Allerdings schreibe ich eine Delegating Handler
:
public class MyHandler: DelegatingHandler
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
// I need IMyService here
return await base.SendAsync(request, cancellationToken);
}
Ich versuchte zunächst zu tun:
using(var scope = request.GetDependencyScope()){
var service = scope.GetService(typeof(IMyService));
}
Aber das - während es funktioniert - scheint den Umfang und zu verhindern, meinen Controller zu schließen von selbst initialisiert korrekt.
ich tun kann:
{
var requestScope = request.GetDependencyScope();
var scope = requestScope.GetRequestLifetimeScope();
var service = scope.Resolve<IMyService>();
// use service
return await base.SendAsync(request, cancellationToken);
}
aber, dass kein Ressourcenleck schaffen? Wird die RequestLifetimeScope
entsorgt, wenn die Anfrage abgeschlossen ist?
Wenn Sie mich mit einer Probe richtig, Best-Practices-Stil Grund DelegatingHandler mit Autofac aufgelöstem Service bieten können, mir das würde sehr helfen. Sie
Ich habe das versucht, Code „Ich konnte tun“, und es scheint gut zu funktionieren. Wenn ich Sie richtig verstehe, ist dies der richtige Weg, meinen Service zu lösen. – Gerino
Ich würde nur GetDependencyScope und von dort lösen, aber ja, wenn Sie Service-Stelle anstelle von DI, so tun müssen. Beachten Sie, dass dies nicht Autofac-spezifisch ist - so funktioniert die Web-API. –