文章目录
- 前言
- 什么是依赖注入
- C# 使用依赖注入
- 框架介绍
- Microsoft.Extensions.DependencyInjection
- Nuget安装
- 简单单例使用
- 打印结果
- 暂时结束
前言
依赖注入是一个非常重要的编程思想,就和面向过程和面向对象一样,IOC和控制反转是一种解耦的编程思想。
什么是依赖注入
[C#]理解和入门依赖注入
为什么要用IOC:inversion of controll反转控制(把创建对象的权利交给框架)
C# 使用依赖注入
框架介绍
目前.NET 有两个最优的依赖注入框架
- Microsoft.Extensions.DependencyInjection:微软官方依赖注入框架,听说在.net core 8.0得到了最强的性能提升
- Autofac:听说也是最强的依赖注入框架,性能强,开销低,功能完善。
Dependency injection in ASP.NET Core
Autofac 官网
Autofac详解
Microsoft.Extensions.DependencyInjection
目前打算用微软的IOC,毕竟是官方背书,性能有保证。
C# 依赖注入IServiceCollection的AddSingleton方法使用
Nuget安装
简单单例使用
声明个测试类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NETCore8.Models
{
public class Person
{
public int Id { get; set; }
public string ?Name { get; set; }
public int Age { get; set; }
}
}
主函数代码
using Microsoft.Extensions.DependencyInjection;
using NETCore8.Models;
using Newtonsoft.Json;
using System.ComponentModel.Design;
namespace NETCore8
{
internal class Program
{
static void Main(string[] args)
{
//构造依赖注入容器
IServiceCollection services = new ServiceCollection();
//注入Person单例,生命周期暂时不展开
services.AddSingleton<Person>();
var builder = services.BuildServiceProvider();
//初始化单例
var res = builder.GetService<Person>();
res.Name = "小刘";
res.Age = 15;
Console.WriteLine(JsonConvert.SerializeObject(res));
//从容器中拿到Person单例,确认是否已被赋值为小刘
var res2 = builder.GetService<Person>();
Console.WriteLine(JsonConvert.SerializeObject(res2));
//修改单例,查看容器中的单例是否被修改
res2.Name = "小红";
res2.Age = 23;
//再从容器中拿出单例
var res3 = builder.GetService<Person>();
Console.WriteLine(JsonConvert.SerializeObject(res3));
Console.WriteLine("Hello, World!");
Console.ReadKey();
}
}
}
打印结果
这个说明这个单例一旦被修改了,容器中的数据就会被修改。但是这样仅仅是和全局静态的效果一样。依赖注入没有这么简单
暂时结束
我后面去研究一下自动装配和生命周期。研究好了再继续更新