欢迎来到科站长!

ASP.NET

当前位置: 主页 > 网络编程 > ASP.NET

ASP.NET Core 6.0 中使用Autofac的项目实践

时间:2025-01-06 10:25:18|栏目:ASP.NET|点击:

1. 引用NuGet包

Install-Package Autofac -Version 6.3.0
Install-Package Autofac.Extensions.DependencyInjection -Version 7.2.0

2. Program 中注册使用

2.1 普通注入

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer(builder => {
    builder.RegisterType().As();  // 直接注册某一个类和接口,左边的是实现类,右边的As是接口
});

2.2 反射程序集方式服务注册

builder.Host.ConfigureContainer(builder =>
{
   var assemblysServices = Assembly.Load("Exercise.Services");
   containerBuilder.RegisterAssemblyTypes(assemblysServices)
              .AsImplementedInterfaces()
              .InstancePerLifetimeScope();
});

还可以进行选择性批量注入,注入之后通过 构造函数或者属性注入的方式使用。

3. AutoFac中常用方法说明

基本概念

1、AsImplementedInterfaces() 是以接口方式进行注入,注入这些类的所有的公共接口作为服务

2、InstancePerRequest() 每次请求共享同一个实例,使用ef时,使不同的操作使用同一个数据上下文

3、PreserveExistingDefaults() 如果不止一个组件暴露了相同的服务, Autofac将使用最后注册的组件作为服务的提供方,那么使用PreserveExistingDefaults防止后面注册的覆盖前面注册的

4、InstancePerDependency为每个依赖或者调用(Resolve())都创建一个新的对象,唯一的实例

5、SingleInstance 为每次请求都使用同一个对象,单例模式.告诉容器,是个单例,但这个单例不用自己实现。

6、RegisterGeneric 对泛型类进行注册

builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>))

7、RegisterInstance() 注册一个实例,比如: 对已经存在的对象的实例进行注册,这样可以使实例转化为由容器托管的实例

8、RegisterControllers() 注册Controllers

builder.RegisterControllers(Assembly.GetExecutingAssembly()); // 注册当前程序集中的所有Controllers  

9、RegisterFilterProvider() 注册Filter过滤器

builder.RegisterFilterProvider()

10、RegisterAssemblyTypes 注册类

builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()); // 注册了当前程序集内的所有的类

11、InstancePerMatchingLifetimeScope 在一个做标识的生命周期域中,每一个依赖或调用创建一个单一的共享的实例。打了标识了的生命周期域中的子标识域中可以共享父级域中的实例

12、InstancePerHttpRequest在一次Http请求上下文中,共享一个组件实例。仅适用于asp.net mvc开发

13、InstancePerLifetimeScope在一个生命周期中,每一次的依赖组件或调用(Resolve())创建一个单一的共享的实例,且每一个不同的生命周期域,实例是不同的

14、UsingConstructor(参数) 自动装配,手动使用特定的构造函数

15、[AsClosedTypesOf(open)]AsClosedTypesOf(typeof(IA<>)): 如果是多继承的话,注册的程序集所对应的服务(接口)是离这个类最近的开放的泛型实例(接口)

builder.RegisterAssemblyTypes(A).AsClosedTypesOf(typeof(IRepository<>));

Autofac中涉及的生命周期

//1、瞬时生命周期:注册之后,每次获取到的服务实例都不一样(默认的注册方式)
containerBuilder.RegisterType().As().InstancePerDependency();
//2、单例生命周期:整个容器中获取的服务实例都是同一个
containerBuilder.RegisterType().As().SingleInstance();
//3、作用域生命周期:在相同作用域下获取到的服务实例是相同的
containerBuilder.RegisterType().As().InstancePerLifetimeScope();
//4、作用域生命周期:可以指定到某一个作用域,然后在相同作用域下共享服务实例
containerBuilder.RegisterType().As().InstancePerMatchingLifetimeScope("My");
//5、http请求上下文的生命周期:在一次Http请求上下文中,共享一个组件实例。仅适用于asp.net mvc开发。
containerBuilder.RegisterType().As().InstancePerRequest();
//6、拥有隐式关系类型的创建新的嵌套生命周期的作用域,在一个生命周期域中所拥有的实例创建的生命周期中,
//  每一个依赖组件或调用Resolve()方法创建一个单一的共享的实例,并且子生命周期域共享父生命周期域中的实例
containerBuilder.RegisterType().InstancePerOwned(); 

到此这篇关于ASP.NET Core 6.0 中使用Autofac的项目实践的文章就介绍到这了,更多相关ASP.NET Core使用 Autofac内容请搜索科站长以前的文章或继续浏览下面的相关文章希望大家以后多多支持科站长!

上一篇:.net core三种依赖注入方式(原生的依赖注入器,scrutor,autofac)

栏    目:ASP.NET

下一篇:ASP.NET Core Web API中实现监控的方法

本文标题:ASP.NET Core 6.0 中使用Autofac的项目实践

本文地址:https://fushidao.cc/wangluobiancheng/3313.html

广告投放 | 联系我们 | 版权申明

申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:257218569 | 邮箱:257218569@qq.com

Copyright © 2018-2025 科站长 版权所有冀ICP备14023439号