依赖注入之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();
}
}
}

最新文章

  1. JS控制键盘录入 和 window.event.keycode对照
  2. No.023:Merge k Sorted Lists
  3. PHP-Redis扩展使用手册(二)
  4. MongoDB 用户配置
  5. asp.net 在线人数
  6. java数据结构和算法------合并排序
  7. BZOJ 3754 Tree之最小方差树
  8. p45.asm
  9. ruby学习--block
  10. GDB 入门篇
  11. Git 远程分支的查看及相关问题
  12. 万能的Volley
  13. 【破解】破解ACDSEE15的方法
  14. 7.28.2 static关键字(静态和成员)
  15. HashTable源码简单介绍
  16. MongoDB的索引(六)
  17. hashMap tableSizeFor 实现原理
  18. FA_资产成批调整(流程)
  19. [转]pageX、clientX、screenX、offsetX、layerX、x
  20. STM32之独立版USB(Host)驱动+MSC+Fatfs移植

热门文章

  1. Service Mesh服务网格新生代--Istio
  2. 开发工具--浅谈Git
  3. 本地eyoucms搬家
  4. JS 将数值取整为10的倍数
  5. 如何构思你的iOS App应用
  6. windows下搭建vue+webpack的开发环境
  7. canvas与svg整理与区别
  8. PHP:CURL分别以GET、POST方式请求HTTPS协议接口api【转】
  9. Python Django Vue 项目创建
  10. 程序员学习photoshop