什么是依赖注入?好处是什么?
依赖注入(DI)是一种设计模式,它可以消除编程代码之间的依赖性,因此可以很容易地管理和测试应用程序。它有三种类型分别为构造函数注入,属性注入以及方法注入。它具有减少依赖性增强组件的可重用性等好处。
通俗的来说我们不通过 new 的方式在类内部创建依赖类的对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类来使用。
好处:
1.减少依赖性
依赖注入可以消除或者减少组件间不必要的依赖性。以降低组件改变时所带来的影响组件
2.增强可重用性
减少组件依赖性可以增强组件的可重用性。如果在不同的上下文中需要某个接口的不同实现,或者只是同一实现的不同配置,则可以将该组件配置为使用该实现。无需更改代码。
3.增加代码的可测试性
依赖注入也增加了组件的可测试性。当依赖项可以注入组件时,意味着可以注入这些依赖项的模拟实现。模拟对象用于测试作为实际实现的替代,并且可以配置模拟对象的行为
4.增强代码的可读性
依赖注入可将依赖项移动到组件的接口。使得更容易看到组件中哪些具有依赖关系,从而使代码更具可读性。
5.减少依赖性承载
依赖性承载会在代码中产生大量“噪音”,使其难以阅读和维护,并且使得组件更难测试。而依赖注入可以减少依赖性承载和静态单例的使用,可以将组件完美的连接在一起
本篇文章示例环境:
visual studio 2022 .net6 winform窗体应用程序
使用
包控制台安装Microsoft.Extensions.DependencyInjectio
修改Program方法文章来源:https://www.toymoban.com/news/detail-449654.html
using Microsoft.Extensions.DependencyInjection;
namespace DataSync
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
//创建服务容器
var services = new ServiceCollection();
//添加服务注册
ConfigureServices(services);
//先用DI容器生成 serviceProvider, 然后通过 serviceProvider 获取Main Form的注册实例
var serviceProvider = services.BuildServiceProvider();
var formMain = serviceProvider.GetRequiredService<Form1>(); //主动从容器中获取FormMain实例, 这是简洁写法
// var formMain = (FormMain)serviceProvider.GetService(typeof(FormMain)); //更繁琐的写法
Application.Run(formMain);
}
/// <summary>
/// 注入服务
/// </summary>
/// <param name="services"></param>
public static void ConfigureServices(IServiceCollection services)
{
//批量注入可以使用Scrutor或者自己封装
services.AddScoped<YlbBio>();//
services.AddScoped(typeof(Form1));
}
}
}
使用:在form1的构造方法注入文章来源地址https://www.toymoban.com/news/detail-449654.html
namespace DataSync
{
public partial class Form1 : Form
{
private readonly YlbBio _YlbBio;
public Form1(YlbBio YlbBio)
{
InitializeComponent();
_YlbBio = YlbBio;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Log.Information(_YlbBio.Get());
Log.Debug("debug");
Log.Warning("warning");
Log.Error("err");
Log.Fatal("fatal");
}
}
}
到了这里,关于net6 winform使用依赖注入(IOC)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!