.NET Unity IOC框架使用實(shí)例詳解
.NET Unity IOC框架的使用實(shí)例,具體內(nèi)容如下
1.IOC簡(jiǎn)介
IOC(Inversion of Control), 控制反轉(zhuǎn)
DI (Dependency Injection),依賴注入
IOC的基本概念是:不創(chuàng)建對(duì)象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對(duì)象和服務(wù)連接,但在配置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)。容器負(fù)責(zé)將這些聯(lián)系在一起。
2.Unity引入

3.創(chuàng)建單例模式容器類
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UnityIocTest
{
/// <summary>
/// Unity IOC單例模式
/// </summary>
public class UnitySingleton
{
//單例
private static UnitySingleton instance;
//ioc容器
public IUnityContainer container;
//獲取單例
public static UnitySingleton getInstance()
{
if (instance == null || instance.container == null)
{
string configFile = "Unity.config";
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };
//從config文件中讀取配置信息
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
//獲取指定名稱的配置節(jié)
UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection("unity");
instance = new UnitySingleton()
{
//container = new UnityContainer().LoadConfiguration((UnityConfigurationSection)ConfigurationManager.GetSection("unity"), "MyContainer")
container = new UnityContainer().LoadConfiguration(section, "MyContainer")
//container = new UnityContainer()
};
//instance.container.RegisterType<IExampleClass, ExampleClass>();
}
return instance;
}
//IOC注入實(shí)體
public static T GetInstanceDAL<T>()
{
return getInstance().container.Resolve<T>();
}
}
}
此處是將Unity config配置單獨(dú)成一個(gè)文件,方便管理。
4.添加IOC相關(guān)類
接口類
public interface IExampleClass
{
void DoHelloWord();
}
具體實(shí)現(xiàn)類
public class ExampleClass : IExampleClass
{
public void DoHelloWord()
{
Console.WriteLine("Hello Word!");
}
}
實(shí)現(xiàn)類擴(kuò)展
public class DIExampleClass
{
//屬性注入
[Dependency]
public IExampleClass example { get; set; }
private IExampleClass testInject;
public void DoWork()
{
example.DoHelloWord();
testInject.DoHelloWord();
}
//方法注入
[InjectionMethod]
public void Initialize(IExampleClass instance)
{
testInject = instance;
}
}
5.添加配置文件Unity.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" /> </configSections> <unity> <!--定義類型別名--> <aliases> <add alias="IExampleClass" type="UnityIocTest.IExampleClass,UnityIocTest" /> <add alias="ExampleClass" type="UnityIocTest.ExampleClass,UnityIocTest" /> </aliases> <!--容器--> <container name="MyContainer"> <!--映射關(guān)系--> <!--<register type="IExampleClass" mapTo="ExampleClass"></register>--> <register type="UnityIocTest.IExampleClass,UnityIocTest" mapTo="UnityIocTest.ExampleClass,UnityIocTest"></register> </container> </unity> </configuration>
6.函數(shù)調(diào)用
class Program
{
static void Main(string[] args)
{
//var dao = UnitySingleton.GetInstanceDAL<IExampleClass>();
var dao = UnitySingleton.GetInstanceDAL<DIExampleClass>();
dao.DoWork();
Console.ReadLine();
}
}
7.結(jié)果顯示
Hello Word!
Hello Word!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后臺(tái)管理系統(tǒng)之前端頁(yè)面框架構(gòu)建源碼分享
- asp.net CommunityServer中的wwwStatus
- .Net Core簡(jiǎn)單使用Mvc內(nèi)置的Ioc(續(xù))
- .Net Core簡(jiǎn)單使用Mvc內(nèi)置的Ioc
- Spring.Net控制反轉(zhuǎn)IoC入門使用
- ASP.NET Core應(yīng)用中與第三方IoC/DI框架的整合
- MVC使用Spring.Net應(yīng)用IOC(依賴倒置)學(xué)習(xí)筆記3
- .net MVC使用IPrincipal進(jìn)行Form登錄即權(quán)限驗(yàn)證(3)
- .net MVC使用Session驗(yàn)證用戶登錄(4)
相關(guān)文章
ASP.NET網(wǎng)站的創(chuàng)建與發(fā)布過程簡(jiǎn)析
這篇文章主要介紹了ASP.NET的創(chuàng)建與發(fā)布過程,過程實(shí)現(xiàn)很簡(jiǎn)單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08
DataTable轉(zhuǎn)成字符串復(fù)制到txt文本的小例子
DataTable轉(zhuǎn)成字符串復(fù)制到txt文本的小例子,需要的朋友可以參考一下2013-03-03
.Net中異步任務(wù)的取消和監(jiān)控的具體實(shí)現(xiàn)
本文主要介紹了.Net中異步任務(wù)的取消和監(jiān)控的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
MVC+EasyUI+三層新聞網(wǎng)站建立 后臺(tái)登錄界面的搭建(二)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第二篇,教大家如何搭建后臺(tái)登錄界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
有關(guān).NET參數(shù)傳遞的方式引發(fā)的思考
在.NET中參數(shù)的使用方法主要為可選參數(shù)、命名參數(shù)、可變數(shù)量參數(shù)等等。本文也是主要介紹這三種參數(shù)的使用方法2016-12-12
Entity?Framework實(shí)現(xiàn)數(shù)據(jù)遷移
本文詳細(xì)講解了Entity?Framework實(shí)現(xiàn)數(shù)據(jù)遷移的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
未在本地計(jì)算機(jī)上注冊(cè)“microsoft.ACE.oledb.12.0”提供程序報(bào)錯(cuò)的解決辦法
這篇文章主要給大家介紹了關(guān)于未在本地計(jì)算機(jī)上注冊(cè)“microsoft.ACE.oledb.12.0”提供程序報(bào)錯(cuò)的完美解決辦法,需要的朋友可以參考下2019-03-03
.NET6使用微信小程序授權(quán)登錄獲取手機(jī)號(hào)
小程序手機(jī)號(hào)授權(quán)是在里打開小程序時(shí)彈窗請(qǐng)求允許使用某些功能,比如授權(quán)獲取用戶信息、授權(quán)獲取手機(jī)號(hào)等,本文主要介紹了.NET6使用微信小程序授權(quán)登錄獲取手機(jī)號(hào),感興趣的可以了解一下2023-08-08

