一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET MVC如何使用Unity實現Ioc詳解

ASP.NET MVC如何使用Unity實現Ioc詳解

2020-05-29 15:24瞭望島 ASP.NET教程

這篇文章主要給大家介紹了關于ASP.NET MVC如何使用Unity實現Ioc的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

為什么有這篇文章

最近在學ASP.NET MVC項目中使用Ioc,選用了Unity作為依賴注入的容器組件,在網上找了相關的文章簡單實現了依賴注入,但想用文件配置的方式進行容器注入的注冊,發現相關的文章實現的方式不適用,因為網上的文章大多是使用Unity 4.0.1的版本,而目前最新的Unity版本是5.8.6,使用配置進行容器注入的代碼已然不同。

Ioc和Unity

IOC(Inversion of Control),即“控制反轉”,是一種設計思想。有了IoC后,把創建和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,所以對象與對象之間是松散耦合,這樣也方便測試,利于功能復用,更重要的是使得程序的整個體系結構變得非常靈活。

Unity是微軟Patterns & Practices 部門開發的一個輕量級的依賴注入容器。

代碼準備

新建一個MVC項目,使用默認命名WebApplication1。在Model中新建下面3個類:

?
1
2
3
4
5
6
7
public class User
{
 public int Id { get; set; }
 public string UserName { get; set; }
 public string Password { get; set; }
 public string Email { get; set; }
}
?
1
2
3
4
public interface IUserDao
{
 List<User> GetAllUsers();
}
?
1
2
3
4
5
6
7
8
9
public class EFUserDao : IUserDao
{
 public List<User> GetAllUsers()
 {
  List<User> list = new List<User>();
  //使用EF從數據庫中讀取數據...
  return list;
 }
}

HomeController中的Index()中編寫代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
using WebApplication1.Models;
public class HomeController : Controller
{
 public ActionResult Index()
 {
  IUserDao dao = new EFUserDao();
  var list = dao.GetAllUsers();
 
  //do something...
 
  return View();
 }
}

以上代碼主要實現從數據庫中獲取用戶列表數據到控制器中。

使用Unity

在項目引用上右擊,管理Nuget程序包,搜索到Unity并安裝。

ASP.NET MVC如何使用Unity實現Ioc詳解

HomeController中代碼改動

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using WebApplication1.Models;
using Unity;
public class HomeController : Controller
{
 public ActionResult Index()
 {
  IUnityContainer container = new UnityContainer();
  container.RegisterType<IUserDao, EFUserDao>();
  var dao = container.Resolve<IUserDao>();
 
  var list = dao.GetAllUsers();
  //do something...
 
  return View();
 }
}

上面代碼先聲明一個Unity的容器,然后注冊所需要的對象,最后調用。

按上面的方式,每次使用GetAllUsers()前都需要聲明下,這里應該封裝下。Unity在ASP.NET MVC中的使用已經將代碼封裝好了。

ASP.NET MVC使用Unity

使用Nuget安裝Unity.MVC。

 ASP.NET MVC如何使用Unity實現Ioc詳解

安裝完成后會在~/App_Start/目錄下自動生成UnityMvcActivator.cs和UnityConfig.cs文件。

打開UnityConfig文件,修改RegisterTypes()方法的代碼

?
1
2
3
4
5
6
7
8
9
public static void RegisterTypes(IUnityContainer container)
{
 // NOTE: To load from web.config uncomment the line below.
 // Make sure to add a Unity.Configuration to the using statements.
 // container.LoadConfiguration();
 
 // TODO: Register your type's mappings here.
 container.RegisterType<IUserDao, EFUserDao>();
}

注意引用

?
1
using WebApplication1.Models;

修改HomeController代碼(使用構造函數注入)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class HomeController : Controller
{
 IUserDao _iUserDao;
 
 public HomeController(IUserDao iUserDao)
 {
  this._iUserDao = iUserDao;
 }
 
 public ActionResult Index()
 {
  var list = _iUserDao.GetAllUsers();
 
  //do something...
 
  return View();
 }
}

此方式是將依賴注入寫在了代碼中。然而并不靈活,每添加一組類,都要在UnityConfig中進行注冊并編譯一遍代碼。我們更需要的是在配置文件中注冊類型。

使用配置文件

修改UnityConfig文件中RegisterTypes()方法的代碼:

?
1
2
3
4
5
6
7
8
9
public static void RegisterTypes(IUnityContainer container)
{
 // NOTE: To load from web.config uncomment the line below.
 // Make sure to add a Unity.Configuration to the using statements.
 container.LoadConfiguration();
 
 // TODO: Register your type's mappings here.
 // container.RegisterType<IUserDao, EFUserDao>();
}

需要引用

?
1
using Microsoft.Practices.Unity.Configuration;

 

更改Web.Config的配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <configSections>
 <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
 </configSections>
 <unity>
 <containers>
  <container>
  <types>
   <type type="WebApplication1.Models.IUserDao, WebApplication1" mapTo="WebApplication1.Models.EFUserDao, WebApplication1" />
  </types>
  </container>
 </containers>
 </unity>
 ......
</configuration>

運行站點,成功獲取用戶列表數據。

擴展

如果需求更改,要換用ADO.NET來操作數據庫,只要建一個SQLUserDao的類,繼承自IUserDao,然后將配置文件中的注冊類型修改即可

?
1
<type type="WebApplication1.Models.IUserDao, WebApplication1" mapTo="WebApplication1.Models.SQLUserDao, WebApplication1" />

筆者使用的是VS2017進行操作。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/overlookr/archive/2018/07/10/9286613.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 校花小雪灌满了男人们的浓浆 | blacked黑人hd2021 bestialityvideo另类 | 久久久久激情免费观看 | 日本高h | 男gaygays免费网站多人 | 亚洲精品91大神在线观看 | 四虎最新永久免费网址 | 人人爽人人射 | 婚前试爱免费观看 | jazz欧美人免费xxxxxx | 美女扒开粉嫩尿口漫画 | 久久婷婷电影网 | 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 99视频福利| 亚洲国产成人在线视频 | 国产在线98福利播放视频免费 | 天天草天天 | 成 人 亚洲 综合天堂 | 久久青青草原综合伊人 | 久久re视频这里精品一本到99 | 欧美区日韩区 | 乌克兰13一14娇小 | 亚洲成在人线视频 | 欧美se图 | 亚洲精彩视频在线观看 | 成年人视频免费在线播放 | 免费一区二区视频 | 成年人在线播放视频 | 午夜无码片在线观看影院 | 色哟哟哟在线精品观看视频 | 久久精品成人免费网站 | 欧美一区二区三区免费看 | 欧美1区| 欧美一区不卡二区不卡三区 | 久久视频在线视频观看精品15 | 亚洲 小说 欧美 激情 另类 | a毛片免费观看完整 | 亚洲第6页 | 精品区卡一卡2卡三免费 | 欧美日韩一区二区综合在线视频 | 久久一本综合 |