zoukankan      html  css  js  c++  java
  • 容器之Autofac

    承接上一篇

    首先理解两个词:
    服务===》接口
    组件===》类

    1:使用Autofac第一就是要先Nuget这个包:
    autofac--》AutoFac.Extensions.Dependencyinjection

    2:在启动项配置下:

     public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args).UseServiceProviderFactory(new AutofacServiceProviderFactory())//这样就添加了ActoFac容器
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });

    3:添加一个对容器的配置函数然后对ActoFac进行添加

    public void ConfigureContainer(ContainerBuilder builder)//Autofac.ContainerBuilder
            {
                //这是只注入了组件(类),Autofac也是可以直接注入类,也是可以直接使用的
                //builder.RegisterType<TestServiceTemp>();
    
                //这是注入了服务(接口)//SingleInstance() 是单例模式//InstancePerLifetimeScope() 作用域
                //builder.RegisterType<TestServiceTemp>().As<ITestServices>().InstancePerLifetimeScope();
                builder.RegisterType<TestServiceTemp>().As<ITestServices>();
    
                //builder.RegisterType<ConstructorTemp>().As<IConstructor>();
                builder.RegisterType<ConstructorTemp>().As<IConstructor>().UsingConstructor();
                //UsingConstructor关键字是可以指定构造函数进行注册
                //就是说,你注册的一个构造函数有带参数的,有不带参数的,
                //可以用这个字指定无参数//如果多个参数不带这个字就是有参数
    
    
                //还可以指定特定的实例来进行注入
                //var Instance = new ConstructorTemp();
                //builder.RegisterInstance(Instance).As<IConstructor>();
    
                //后面还是lamda表达式进行注入
    //这里就几个芝士点:
    1.AutoFac支持直接注入类
    2.AS()关键字转成注入接口 3.生命周期的两个关键字
    4.UsingConstructor 指定函数参数关键字
    5.指定实例进行注入
    ...
    //RegisterType:注册一个类; //AS:将类注册为此接口; //SingleInstance() 是单例模式 全局只有一个; //InstancePerLifetimeScope() 作用域 在同一个作用域,服务请求只创建一次; }

    控制器Code:

        [Route("api/[controller]")]
        [ApiController]
        public class AutofacController : ControllerBase
        {
            //当有请求的时候,注入会先直接去找你在SartUp中注入的类,开展活动(接口类的逻辑处理)
    //当你Debug到下面的代码的时候,接口Iconstructor的继承类都已经把默认值,构造函数啥的搞定了
    public IConstructor _constructor; public AutofacController(IConstructor constructor) { _constructor = constructor; } public Tuple<int, int> Get() { int before = _constructor.service.count; _constructor.service.Add(); int after = _constructor.service.count; return new Tuple<int, int>(before, after); } }
        public  interface IConstructor
        {
            public ITestServices service { get; }
        }
    public class ConstructorTemp : IConstructor
        {        
            public ConstructorTemp()
            {
                Console.WriteLine("0参数的构造函数");
            }
    public ITestServices _services; public ConstructorTemp(ITestServices services) { _services = services; Console.WriteLine("有参数的构造函数"); } public ITestServices service { get { return _services; } } }
    人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。
  • 相关阅读:
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    数据预处理流程
    pandas读取大量数据的分块处理
    go语言 nil一些注意的地方
    C语言编程优化运行速度
    go语言常用内置函数
    RSA加密算法
    一致性哈希算法原理
    数据服务的分布式模型
    leetcode链表题
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/14680895.html
Copyright © 2011-2022 走看看