说起依赖注入 相信大家已经很熟悉了,这里我在简要的描述一遍,
什么是依赖注入:
我们从字面意义上来解释一下:依赖代表着两个或者多个对象之间存在某些特定的联系:举一个不是很恰当的例子
比如说一度夫妻组成的家庭里没有儿女,咱们暂且把这个家庭当做是一个对象(家),但是他们想要领养一个儿女怎么办,他们想通过福利院去找到这个合适的家庭成员,最终家庭里添加了一位新成员,这里福利院的角色咱们就称为注入者,添加的这个成员的动作就称为注入(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(); }