Unity Container 應用示例

2021-09-08 11:10:15 字數 4088 閱讀 1293

右鍵專案引用-> 管理nuget包->搜尋unity->安裝unity 和 unity interception extension,如下圖所示.

我們以商品查詢的資料層注入為例.

1.首先建立商品實體model. 如果商品資訊要被序列化,就要為該類新增serializable特性.

public

class

product

public

string name

public

int price

public

override

string

tostring()

\r\n name:\r\n price:\r\n

",id,name,price);}}

2.建立資料層介面及其實現類.

public

inte***ce

iproductdao

public

class

productdao:iproductdao;}

}

3.直接建立例項

其實有了以上內容就可以呼叫查詢商品資訊了.

不過在專案中使用這種方式的話,耦合度比較高.一旦想修改iproductdao的實現方式涉及到的地方就太多了. 使用unity實現依賴注入可以降低耦合.

1.建立unity配置檔案

xml version= "

1.0

"?>

< configuration>

< configsections>

< section name= "

unity

" type ="

microsoft.practices.unity.configuration.unityconfigurationsection, microsoft.practices.unity.configuration

" />

< unity xmlns= "

">

< assembly name= "

democache

"/>

< namespace name= "

democache.dao

"/>

< namespace name= "

democache.dao.impl

"/>

< container name= "

dao

">

< register type= "

iproductdao

" mapto= "

productdao

">

2.建立unitycontainermanager類建立unitycontainermanager讀取unity.config配置.  完整**見附件,重點看一下從unity.config讀取配置資訊的方法:

private

iunitycontainer loadunityconfig()

;//從config檔案中讀取配置資訊

var unitysection = (unityconfigurationsection)configuration.getsection("

unity");

var container = new

unitycontainer();

foreach (var item in

unitysection.containers)

return

container;

}

3.呼叫示例

static

void main( string

args)

1.建立icallhandler介面實現類新建類logcallhandler類,實現介面icallhandler. 每次呼叫相應方法時會自動將執行時間寫入日誌.

public

class

logcallhandler:icallhandler

:", input.arguments.parametername(i), input.arguments[i]);

}loghelper.loginfo(

string.format("

方法 ,執行時間 ms

", argumentssb, stopwatch.elapsedmilliseconds,msg));

return

result;

}public

int order

public

string msg

}

2.建立特性建立特性logtime,它需要實現handlerattribute.

public

class

logtimeattributes:handlerattribute

public

string msg

public

override

icallhandler createhandler(iunitycontainer container);}

}

3.使用特性

[logtimeattributes (order = 1,msg = "

查詢單個商品資訊

" )]

4.配置unity.config配置unity interception需要在unity節點下新增:

<

sectionextension

type 

=" microsoft.practices.unity.interceptionextension.configuration.interceptionconfigurationextension,microsoft.practices.unity.interception.configuration "

>

sectionextension 

>

然後在container節點下新增:

<

extension

type

= "interception "

/>

最後調整iproductdao的註冊節點:

<

register

type

= "iproductdao "

mapto

= "productdao "

>

<

interceptor

type

=" inte***ceinterceptor"

/>

<

policyinjection

/>

register

>

呼叫處不用做調整,結果如下:

5.不使用unity.config配置檔案

其實如果不走unity.config配置檔案,也可以直接在**中設定.

static

void main(string

args)

**:

Silverlight Caliburn應用框架2

silverlight caliburn應用框架1 silverlight caliburn應用框架2 silverlight caliburn應用框架3 silverlight caliburn應用框架4 silverlight caliburn應用框架5 silverlight caliburn...

FormsAuthentication應用之登入

配置項描述 name aspxauth loginurl login.aspx defaulturl default.aspx protection all timeout 30 path requiressl false slidingexpiration false cookieless use...

jquery easyui table 典型應用

主要介紹以下幾種功能的典型應用,並列出 提供參考 動態載入資料字段修改樣式,使用styler字段修改文字長度自適應批量的操作 1,動態載入資料 datagrid getdatagrid nowrap false,columns else else if value 警報 else if value ...