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

什么是依赖注入:

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

比如说一度夫妻组成的家庭里没有儿女,咱们暂且把这个家庭当做是一个对象(家),但是他们想要领养一个儿女怎么办,他们想通过福利院去找到这个合适的家庭成员,最终家庭里添加了一位新成员,这里福利院的角色咱们就称为注入者,添加的这个成员的动作就称为注入(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();
}

AspNet Core 核心 通过依赖注入(注入服务)的更多相关文章

  1. ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)

    ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题:  浏览器安全限制了前端脚本跨站点的访问资源, ...

  2. 在WPF中使用.NET Core 3.0依赖项注入和服务提供程序

    前言 我们都知道.NET Core提供了对依赖项注入的内置支持.我们通常在ASP.NET Core中使用它(从Startup.cs文件中的ConfigureServices方法开始),但是该功能不限于 ...

  3. AspNet Core Api Restful +Swagger 实现微服务之旅 (三)

    (1)  访问Rest ful接口时 Token验证  返回数据格式封装 (一)访问时Token验证  返回数据格式封装 1.1访问Api接口 方法 实现         1.1.1 创建访问Rest ...

  4. AspNet Core Api Restful +Swagger 实现微服务之旅(四)

    这几天没更新,项目框架也是在发展阶段,这几天学习配置了一遍Apollo和RabbitMQ 等到放到框架上之后我整理一下到时候把心得写出来相互学习. 接着上一篇的内容 (2)  程序错误时  返回数据格 ...

  5. 使用依赖关系注入在 ASP.NET Core 中编写干净代码

    ASP.NET Core 1.0 是 ASP.NET 的完全重新编写,这个新框架的主要目标之一就是更多的模块化设计.即,应用应该能够仅利用其所需的框架部分,方法是框架在它们请求时提供依赖关系.此外,使 ...

  6. [转]使用依赖关系注入在 ASP.NET Core 中编写干净代码

    本文转自:http://blog.jobbole.com/101270/ 原文出处: Steve Smith    ASP.NET Core 1.0 是 ASP.NET 的完全重新编写,这个新框架的主 ...

  7. ASP.NET Core中的依赖注入(3): 服务的注册与提供

    在采用了依赖注入的应用中,我们总是直接利用DI容器直接获取所需的服务实例,换句话说,DI容器起到了一个服务提供者的角色,它能够根据我们提供的服务描述信息提供一个可用的服务对象.ASP.NET Core ...

  8. (2)ASP.NET Core 依赖关系注入(服务)

    1.前言 面向对象设计(OOD)里有一个重要的思想就是依赖倒置原则(DIP),并由该原则牵引出依赖注入(DI).控制反转(IOC)及其容器等老生常谈的概念,初学者很容易被这些概念搞晕(包括我在内),在 ...

  9. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

随机推荐

  1. js----数组处理之splice(有js原始addClass方法哦)

    上次写了一个轮播的方法:http://blog.csdn.net/stronglyh/article/details/46833499 由于别人问我的时候,给了我html.于是乎我就看到了页面中引用了 ...

  2. 数据加密,android客户端和服务器端可共用

    安卓中,不管是内网还是外网,数据的传输首要考虑就是安全问题,尤其是用户信息,以及各种密码等敏感信息. 所以说,对数据的加密是很有必要的,尤其是当下物联网蓬勃发展的今天,数据安全尤为重要. 数据加密的方 ...

  3. scott表结构

  4. 【java】获取当前日期时间:java.util.Date

    public class TestDate { public static void main(String[] args) { System.out.println(new java.util.Da ...

  5. 4.前端基于react,后端基于.net core2.0的开发之路(4) 前端打包,编译,路由,模型,服务

    1.简要的介绍 学习react,首先学习的就是javascript,然后ES6,接着是jsx,通常来说如果有javascript的基础,上手非常快,但是真正要搭建一个前端工程化项目,还是有很多坑的 搞 ...

  6. OC学习16——对象归档

    转载自  OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都 ...

  7. iOS tableViewCell 在自定义高度方法中遇到的问题,cell高度为0,cell显示不出来,cell直接显示第几个而不是...cell显示个数不对

    遇到以上问题可以看看你的cell高度中是否有,自定的高度,有了继续看,没有了继续百度... 在文字排版中,少不了自适应文字高度,行间距什么的:显然cell的高度时不固定的,如果复用自定义的cell的话 ...

  8. iOS开发--数据库管理CoreData的使用

    CoreData是iOS5后,苹果提供的原生的用于对象化管理数据并且持久化的框架.CoreData本质上是将底层数据库封装成对象进行管理.但数据库实际上只是CoreData的一个功能,并不是全部功能. ...

  9. [C#]获得WindowsForm上所有特定类型的控件

    本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.0及以 ...

  10. Oracle ADG搭建

    Oracle Active Data Guard搭建 一:安装 1.基础环境配置 1.1.开启强制日志记录 DG日志发送方式中ARCH进程和LGWR进程的ASYNC模式都是基于日志同步的,所以我们必须 ...