我已经阅读了大多数文档,但仍不确定依赖范围的具体用法。

当我的请求到达我的控制器时,我通常可以使用控制器的依赖项(通过构造函数注入提供),而不必为它担心。

但是,我正在编写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);
    }

我最初尝试做的是:

using(var scope = request.GetDependencyScope()){
    var service = scope.GetService(typeof(IMyService));
}

但是,尽管它起作用了,但似乎关闭了作用域,甚至阻止了我的Controller正确初始化。

我可以做:

{
      var requestScope = request.GetDependencyScope();
      var scope = requestScope.GetRequestLifetimeScope();

      var service = scope.Resolve<IMyService>();
      // use service
      return await base.SendAsync(request, cancellationToken);
}

但这不会造成资源泄漏吗? 请求完成后会否处理RequestLifetimeScope

如果您可以使用Autofac解析的服务为我提供正确的,最佳实践样式的基本DelegatingHandler示例,那将对我有很大帮助。

#1楼 票数:1 已采纳

请求级别的依赖关系范围是为您创建并为您分配的。 只需获取它(不在using ),然后根据需要从中解决。 当然,请确保您的中间件之前执行Autofac中间件以便可以为您创建范围。 如果是这种情况,它也会在您之后进行清理。 自动。

  ask by Gerino translate from so

未解决问题?本站智能推荐:

2回复

ASP.NET Web API 2 通过 Autofac 依赖注入访问当前用户声明

目前,我必须使用 Topshelf 和 Owin 开发一个自托管的 ASP.NET Web API 2。 我使用 Autofac 作为 IOC 容器和带有 JWT 令牌的 OAuth2 身份验证。 在 .NET Core/.NET 5 web api 中,我可以通过IHttpContextAcce
1回复

将Autofac与Web Api 2和Owin结合使用

我是DI库的新手,并试图在Owin的WebApi 2项目中使用Autofac。 这是我的Owin Startup课程, 当我调用Api方法时,出现此错误 尝试创建“ MyController”类型的控制器时发生错误。 确保控制器具有无参数的公共构造函数。 我在这里想
3回复

使用OWIN的WebApi2中的Autofac DI错误

我在WebApi中遇到DI问题。 我已经根据指令添加了autofac。 但是解析控制器有问题。 我收到一个错误: 启动文件 ValuesController.cs ITestRepository.cs TestRepository.cs 我尝试使
1回复

使用Autofac在Web API 2 AccountController中注入ISecureDataFormat

我在Web API 2项目中使用ASP.NET Identity 2.2,但不确定如何使用Autofac连接 AccountController的ISecureDataFormat<AuthenticationTicket>依赖项 。 我尝试了这个: 并得到错误:
1回复

AutoFac + WebAPI不处理对象

我有以下代码来构建依赖关系: private static void InitializeContainer(HttpConfiguration config) { var builder = new ContainerBuilder(); var controllers =
1回复

Autofac:如何在SingleInstance范围内使用每个请求的依赖关系?

有IDbConnection连接依赖项注册为per-request , ApplicationOAuthProvider注册为single instance 。 需要在身份声明中存储用户权限。 为此,我创建了命令GetRolePermissions,并在此命令中注入IDbConnect
1回复

Autofac-解决单独程序集的WebApi控制器中的依赖项

我在Visual Studio解决方案中有两个项目 ProjectA -Owin Selfhost Webapi应用程序 ProjectB-此处添加了类库应用程序(参考ProjectA)WebApi控制器 该项目B控制器在项目A通过重写DefaultAssembliesReso
1回复

使用Autofac动态解决依赖关系

像我正在做的那样动态地解决依赖关系是否很好。 建议在任何地方都使用构造函数注入。 我真的不明白我这样做的弊端。 代码片段如下。 Employee.cs IRepository.cs Repository.cs EmployeeController.cs