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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲第一男人网站 | 亚洲精品tv久久久久久久久久 | 日本深夜视频 | 久青草国产在视频在线观看 | 毛片视频网站在线观看 | a黄毛片| 日韩hd高清xxxⅹ | 加勒比京东热 | 清纯漂亮女友初尝性过程 | 扒开黑女人p大荫蒂老女人 扒开大腿狠狠挺进视频 | 久久机热视频 这里只有精品首页 | 亚洲高清中文字幕精品不卡 | 国产91视频网 | 日本国产高清色www视频在线 | japanesexxxx日本妞 | bt国产| 亚洲免费国产 | 亚洲看片lutube在线入口 | 久久永久影院免费 | 免费观看小视频 | 青青草原国产视频 | 五月天导航 | 国产一区日韩二区欧美三 | 亚洲小视频网站 | 厨房里摸着乳丰满在线观看 | 亚洲国产成人精品不卡青青草原 | 国产盗摄wc厕所撒尿视频 | 四虎在线永久视频观看 | 毛片大全免费看 | 美女女女女女女bbbbbb毛片 | 1024香蕉视频 | 国产愉拍精品视频手机 | sese在线播放 | 果冻传媒在线视频观看免费 | 日韩在线免费看 | 亚洲色图影院 | 爱情岛论坛亚洲永久入口口 | 亚洲天堂色图 | 50度灰破解版v5.7.0 | 国产精品亚洲片在线观看麻豆 | 天堂8在线天堂资源在线 |