加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

每个请求的ASP.NET 5(VNext)Autofac实例

发布时间:2020-12-16 07:13:07 所属栏目:asp.Net 来源:网络整理
导读:我正在玩ASP.NET vNext,我想在我的一些注册中使用InstancePerRequest,例如MyDbContext就是一个例子. 我已经使用InstancePerLifetimeScope为这些依赖项运行Autofac.哪个有效…. 但是一旦我切换到使用InstancePerRequest,我就会遇到这个常见错误: DependencyR
我正在玩ASP.NET vNext,我想在我的一些注册中使用InstancePerRequest,例如MyDbContext就是一个例子.

我已经使用InstancePerLifetimeScope为这些依赖项运行Autofac.哪个有效….

但是一旦我切换到使用InstancePerRequest,我就会遇到这个常见错误:

DependencyResolutionException: No scope with a Tag matching
‘AutofacWebRequest’ is visible from the scope in which the instance
was requested. This generally indicates that a component registered as
per-HTTP request is being requested by a SingleInstance() component
(or a similar scenario.) Under the web integration always request
dependencies from the DependencyResolver.Current or
ILifetimeScopeProvider.RequestLifetime,never from the container
itself.

我已经阅读了关于此的Autofac帮助文档….但我不确定如何设置导致此异常的“请求生命周期范围”.

有没有人设置集成Autofac的ASP.NET 5 Web应用程序,包括InstancePerRequest?

解决方法

据我所知,您有两个选项,它们都会根据请求为您提供实例.

假设你有以下课程注册:

public class Foo : IDisposable 
{
    public Foo()
    {
        Console.WriteLine("created");
    }

    public void Dispose()
    {
        Console.WriteLine("disposed");
    }
}

注册IServiceCollection

您可以将实例注册为IServiceCollection的作用域,并基于此构建Autofac容器.

public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddScoped<Foo,Foo>();

#if DNX451
            // Create the autofac container
            var builder = new ContainerBuilder();

            // Create the container and use the default application services as a fallback
            AutofacRegistration.Populate(builder,services);
            var container = builder.Build();

            return container.Resolve<IServiceProvider>();
#endif

            return services.BuildServiceProvider();
        }

在Autofac Builder上注册

您可以在Autofac构建器上将该类型注册为每个生命周期范围的实例,这将为您提供每个请求生存期的实例:

public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
#if DNX451

            // Create the autofac container
            var builder = new ContainerBuilder();

            // Create the container and use the default application services as a fallback
            AutofacRegistration.Populate(builder,services);
            builder.RegisterType<Foo>().As<Foo>().InstancePerLifetimeScope();
            var container = builder.Build();

            return container.Resolve<IServiceProvider>();
#endif

            return services.BuildServiceProvider();
        }

如上所述,两者的结果相同:

有关ASP.NET 5:Middlewares and Per Request Dependency Injection上每个请求实例的详细信息

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读