基础知识点

资料:https://autofaccn.readthedocs.io/en/latest/integration/aspnetcore.html#

1.core3.1使用:Program.cs中CreateHostBuilder 方法

  

1      public static IHostBuilder CreateHostBuilder(string[] args) =>
2                 Host.CreateDefaultBuilder(args) 
3                 .UseServiceProviderFactory(new AutofacServiceProviderFactory())
4                 .ConfigureWebHostDefaults(webBuilder =>
5                 {
6                     webBuilder.UseStartup<Startup>();
7                    
8                 });

Startup.cs 中 

 1      public void ConfigureContainer(ContainerBuilder builder)
 2         {
            //注入20             
21         }

 

 

2.AsImplementedInterfaces()  是以接口方式进行注入,注入这些类的所有的公共接口作为服务(除了释放资源)

  A:IA

  builder.RegisterType<A>().AsImplementedInterfaces();  使用时用IA,会返回一个A的实例,即将自身的实例进行注入

 

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

    builder.RegisterType<A>().AsImplementedInterfaces().InstancePerRequest() ;

 

4.PreserveExistingDefaults() 防止后面注册的覆盖前面注册的,指定为非默认值。对于同一个接口,后面注册的会覆盖前面注册的。

builder.Register<A>() .As<IA>();

builder.Register<AA>() .As<IA>();  这样AA就会覆盖A

builder.Register<AA>() .As<IA>().PreserveExistingDefaults()   这样A是IA的默认值,不会被AA覆盖

 

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

 

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

 

7.RegisterGeneric 对泛型类进行注册

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

 

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

A:IA

public class B:IB

{

A a=new A();

}

builder.RegisterInstance(B.A).As<IA>();

builder.RegisterInstance(B.A).As<IA>().ExternallyOwned();

调用ExternallyOwned()方法告诉容器不用清理,释放。


9.RegisterControllers() 注册Controllers

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

 

10.RegisterFilterProvider() 注册Filter过滤器(非全局)

builder.RegisterFilterProvider()

 

11.RegisterAssemblyTypes 注册类

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

 

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

builder.RegisterType<A>() .AsImplementedInterfaces() .InstancePerMatchingLifetimeScope();

 

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


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

 

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

builder.RegisterType<A>().UsingConstructor(typeof(IA),typeof(IAA))   这样指定调用的是A(IA,IAA)的构造函数,如果该构造函数不存在则报错

 

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

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

 

17.注入模块: class  AutofacModuleRegister: Autofac.Module;    startup.cs 类 ConfigureContainer 方法中 builder.RegisterModule<AutofacModuleRegister>();

posted @ 2020-05-17 22:43  wewehahayuyu  阅读(184)  评论(0)    收藏  举报