Skip to main content
 首页 » 编程设计

AspNet Core 核心 通过依赖注入(注入服务)

2022年07月15日69小虾米

说起依赖注入 相信大家已经很熟悉了,这里我在简要的描述一遍,

什么是依赖注入:

       我们从字面意义上来解释一下:依赖代表着两个或者多个对象之间存在某些特定的联系:举一个不是很恰当的例子

                         比如说一度夫妻组成的家庭里没有儿女,咱们暂且把这个家庭当做是一个对象(家),但是他们想要领养一个儿女怎么办,他们想通过福利院去找到这个合适的家庭成员,最终家庭里添加了一位新成员,这里福利院的角色咱们就称为注入者,添加的这个成员的动作就称为注入(DI)。 注入方式有很多,举一个简单的代码例子:

       这是一个构造器注入的例子

 

/// <summary> 
        /// 家庭对象 
        /// </summary> 
        public class family 
        { 
            /// <summary> 
            /// 成员 
            /// </summary> 
            public string member { get; set; }  
            //构造函数 
            public family(string Value )  
            { 
                member = Value; 
            } 
        }

 调用代码 如下

 Console.WriteLine("********************构造器注入******************"); 
            family family = new family("儿子"); 
            string ReturnValue=  family.member; 
            Console.WriteLine(ReturnValue); 
            Console.WriteLine("********************构造器注入******************");

输出结果:

方式有很多种网上资料还是很多的:

回到AspNetCore核心的依赖注入:

     为什么说起这个:因为在Core Web程序启动的过程中,是通过Core的启动类Starup 中注册的 配置/和服务 辅助运行。Starup 中配置/和服务就是通过依赖注入注入进去的。

        注册MVC服务 
        这是框架自动生成后的 
        public void ConfigureServices(IServiceCollection services) 
 
        { 
 
            services.AddMvc(); 
 
        }
   自定义自己的服务 
    public void ConfigureServices(IServiceCollection services) 
        {
//增加自己的EF服务 并连接 数据库 services.AddEntityFrameworkSqlServer().AddDbContext
<EFDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServer")));
//增加自己的EF 服务用来记录Log services.AddEntityFrameworkSqlServer().AddDbContext
<EFLogDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServerLog"))); }

解决方案自动生成的 IOC容器,返回值为 void    如果想引入第三方容器的话需要更改此类的返回值, 返回值需要更改为 IServiceProvider  此接口只有一个方法

   第三方没有用过就不写出来误导人了基本代码如下:

    public IServiceProvider ConfigureServices(IServiceCollection services) 
        { 
             
            services.AddMvc(); 
//在这里写第三方容器 
        }

也可以在这这地方里注入第三方容器

 public IActionResult Index() 
        { 
           
            //RequestServices  获取或设置系统。提供对请求的访问的iServiceProvider服务容器。 
            this.HttpContext.RequestServices.GetService(); 
         
            return View(); 
        }

本文参考链接:https://www.cnblogs.com/szlblog/p/8277311.html