簡體   English   中英

DryIoc-ASP.Net Core-每個請求的范圍上下文

[英]DryIoc - ASP.Net Core - Scope context per request

我想在我的應用程序(ASP.Net Core 2.2)中使用DryIoc。 我想在執行一個API服務的調用期間使用相同的服務實例。 (在Http調用期間/作用域上下文中)。 如果它位於ASP.Net WebApi中,則我希望每個http上下文都有一個作用域。 在DryIoc文檔中,可以將AsyncExecutionFlowScopeContext用於WebApi。

但是,對於ASP.Net Core,我並不真正了解如何使用和聲明每個請求的作用域。

我的代碼基於以下示例: https : //github.com/dadhi/DryIoc/tree/master/samples/DryIoc.AspNetCore.Sample

如果我嘗試解析聲明為ScopeService(Reuse.Scoped)的服務,則會出現問題:無法從沒有范圍的容器解析IScopedService IsResolutionCall。

供您參考,我的容器的聲明類似於示例:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddMvc()

    // Enables controllers to be resolved by DryIoc, OTHERWISE resolved by infrastructure
    .AddControllersAsServices();

    var container = new Container(rules => rules.With(
        propertiesAndFields: request => 
        request.ServiceType.Name.EndsWith("Controller")
        ? PropertiesAndFields.Properties()(request)
        : null)
        .WithCaptureContainerDisposeStackTrace());

    Container = container;

    return container.WithDependencyInjectionAdapter(services,
        throwIfUnresolved: type => type.Name.EndsWith("Controller"))
        // Your registrations are defined in CompositionRoot class
        .ConfigureServiceProvider<CompositionRoot>();
}

對於注冊:

public CompositionRoot(IRegistrator r)
{
    r.Register<ISingletonService, SingletonService>(Reuse.Singleton);
    r.Register<ITransientService, TransientService>(Reuse.Transient);
    r.Register<IScopedService, ScopedService>(Reuse.Scoped);
 }

如果我嘗試在一項服務中執行此操作:

var myScopedServvie = Container.Resolve<IScopedService>();

我有一個例外:ContainerException:無法通過帶有{CaptureContainerDisposeStackTrace}和Made = {PropertiesAndFields =}的規則的無范圍容器從容器解析IScopedService IsResolutionCall

所以我的問題是:如何為我的API的每個請求打開作用域? 我可以看到一些測試:

(var scope = container.OpenScope())
...

但是我不知道如何在我的應用程序中使用此代碼。

謝謝你的幫助。

Asp .Net Core框架會根據每個Web請求自動打開一個范圍,您無需費心。

如果要測試容器設置,則可以在相應的測試中手動使用OpenScope ,然后從返回的范圍中進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM