zoukankan      html  css  js  c++  java
  • AspNet Core 核心 通过依赖注入(注入服务)

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

    什么是依赖注入:

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

                             比如说一度夫妻组成的家庭里没有儿女,咱们暂且把这个家庭当做是一个对象(家),但是他们想要领养一个儿女怎么办,他们想通过福利院去找到这个合适的家庭成员,最终家庭里添加了一位新成员,这里福利院的角色咱们就称为注入者,添加的这个成员的动作就称为注入(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();
            }
  • 相关阅读:
    InvalidIndexNameException[Invalid index name [2Shard], must be lowercase]
    Head插件——学习Elasticsearch的锋刃利器!
    Fiddler使用AutoResponder进行本地文件和线上文件的映射
    启动redis出现Creating Server TCP listening socket *:6379: bind: No such file or directory
    Project configuration is not up-to-date with pom.xml错误解决方法
    创建支持eclipse的多模块maven项目
    Eclipse添加默认的JRE
    错误:HttpServlet was not found on the Java
    Android插件化开发之Atlas初体验
    Android屏幕适配全攻略(最权威的官方适配指导)
  • 原文地址:https://www.cnblogs.com/szlblog/p/8277311.html
Copyright © 2011-2022 走看看