依赖注入之unity(winform方式)
依赖注入之unity(winform方式)
要讲unity就必须先了解DI和IOC及DIP,如下链接提供DI和IOC的基础:https://www.cnblogs.com/zlp520/p/12015973.html
一.什么是unity?
unity是实现依赖注入的IOC容器,通过unity可以降低代码的耦合度。
二.下载并添加引用:
Microsoft.Practices.Unity.dll
Microsoft.Practices.Unity.Configuration.dll
二.实现途径?
1.代码实现:(核心代码)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Configuration; using Microsoft.Practices.Unity.Configuration; using Microsoft.Practices.Unity; using ZLP.IBLL; using ZLP.BLL; namespace ZLP.Win { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { var container = new UnityContainer();//创建容器对象 container.RegisterType<IUserBLL, UserBLL>();//通过代码注入 var instance = container.Resolve<IUserBLL>();//从容器中获取对象 this.dataGridView1.DataSource = instance.GetList(); } } }
2.配置文件实现:(推荐,这种方式才是真正的彻底不耦合)
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <unity> <typeAliases> <typeAlias alias="IUserBLL" type="ZLP.IBLL.IUserBLL,ZLP.IBLL" /> <typeAlias alias="UserBLL" type="ZLP.BLL.UserBLL,ZLP.BLL" /> </typeAliases> <containers> <container name="defaultContainer"> <type type="IUserBLL" mapTo="UserBLL" name="a"></type > </container> </containers> </unity> </configuration>
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Configuration; using Microsoft.Practices.Unity.Configuration; using Microsoft.Practices.Unity; using ZLP.IBLL; using ZLP.BLL; namespace ZLP.Win { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { var container = new UnityContainer();//创建容器对象 var section = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName); section.Configure(container, "defaultContainer"); var instance = container.Resolve<IUserBLL>("a");//配置name这里就需要a,没有配置就不需要,多个类实现一个接口,通过name区分 this.dataGridView1.DataSource = instance.GetList(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构