
IOC与DI都是为了降低类与类之间的耦合度。
耦合性
耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。
形象的说,就是要将代码写的和电脑一样,主类就是电脑的主机箱,当程序需要实现什么功能的时候只需要在其他的类引入接口,就像电脑上的usb接口。
在我们实际开发中,类似于
- UserDAL userDAL = new UserDAL();
像这种代码,是直接关联的,依赖关系强,耦合度就很高,修改起来就很麻烦。我们就是为了降低它的耦合性,也就是提高独立性。
我们需要借助容器来进行调用,灵活性高,修改的时候只需要改容器中的代码就行了,不需要每个地方修改。
Unity插件下载地址:http://www.tnblog.net/resource/show/aojiancc2/715452b4c5774d6e9cc45fb3a8ecb1b8
下载我们需要在项目中添加引用。
那下面我们就来进行今天的详细讲解!
首先我们创建一个类库(NET58_DAL)
创建一个接口(IUserDAL)
代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace UntiyLearn.Interface
- {
- public interface IUserDAL
- {
- string GetUser();
- }
- }
再创建两个类(NewDAL、UserDAL)去实现接口
代码如下:
NewDAL
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using UntiyLearn.Interface;
-
- namespace NET58_DAL
- {
- public class NewDAL:IUserDAL
- {
- public string GetUser()
- {
- return "贝贝";
- }
- }
- }
UserDAL
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using UntiyLearn.Interface;
-
- namespace NET58_DAL
- {
- public class UserDAL:IUserDAL
- {
- public string GetUser()
- {
- return "小明";
- }
- }
- }
现在我们再我们的主项目中创建容器(myUnityContainer)
代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using Microsoft.Practices.Unity;
- using NET58_DAL;
- using UntiyLearn.Interface;
- namespace UntiyLearn.Untiy
- {
- public class myUnityContainer
- {
- //创建容器
- static IUnityContainer unityContainer = new UnityContainer();
-
- static myUnityContainer()
- {
- //配置关系
- unityContainer.RegisterType<IUserDAL,NewDAL>();
- }
-
- //得到容器
- public static IUnityContainer GetUnity()
- {
- return unityContainer;
- }
- }
- }
然后在控制器中进行调用:
- using Microsoft.Practices.Unity;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using UntiyLearn.Interface;
- using UntiyLearn.Untiy;
- namespace UntiyLearn.Controllers
- {
- public class HomeController : Controller
- {
- public ActionResult Index()
- {
- IUnityContainer unityContainer = myUnityContainer.GetUnity();
- IUserDAL userDAL = unityContainer.Resolve<IUserDAL>();
- ViewBag.user = userDAL.GetUser();
- return View();
- }
- public ActionResult About()
- {
- IUnityContainer unityContainer = myUnityContainer.GetUnity();
- IUserDAL userDAL = unityContainer.Resolve<IUserDAL>();
- ViewBag.user = userDAL.GetUser();
- return View();
- }
- public ActionResult Contact()
- {
- IUnityContainer unityContainer = myUnityContainer.GetUnity();
- IUserDAL userDAL = unityContainer.Resolve<IUserDAL>();
- ViewBag.user = userDAL.GetUser();
- return View();
- }
- }
- }
运行效果:
首页:
关于:
联系方式:
显示的名字都是NewDAL中GetUser返回的贝贝,这时我们想要改成UserDAL中GetUser中返回的小明,这时我们只需要修改容器的配置步骤代码就好了,如下:
- //配置关系
- unityContainer.RegisterType<IUserDAL,UserDAL>();
现在我们再运行:
首先:
关于:
联系我们:
这时我们看到名字都变成了小明,节省了我们很多时间,不要去改很多代码,只需要改容器中的配置就好了,
你学会了吗?
评价
排名
27
文章
20
粉丝
11
评论
5
.NET MVC json对象或者json对象数组的序列化和反序列化(二)
剑轩 : 我也觉得ok
.NET MVC json对象或者json对象数组的序列化和反序列化(一)
是伍尚金哇 : nice
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术
皮卡丘
小哥哥真厉害![[爱你]](http://www.tnblog.net/content/static/layui/images/face/11.gif)
![[爱你]](http://www.tnblog.net/content/static/layui/images/face/11.gif)
![[爱你]](http://www.tnblog.net/content/static/layui/images/face/11.gif)