右鍵專案引用-> 管理nuget包->搜尋unity->安裝unity 和 unity interception extension,如下圖所示.
我們以商品查詢的資料層注入為例.
1.首先建立商品實體model. 如果商品資訊要被序列化,就要為該類新增serializable特性.
public2.建立資料層介面及其實現類.class
product
public
string name
public
int price
public
override
string
tostring()
\r\n name:\r\n price:\r\n
",id,name,price);}}
publicinte***ce
iproductdao
public3.直接建立例項class
productdao:iproductdao;}
}
其實有了以上內容就可以呼叫查詢商品資訊了.
不過在專案中使用這種方式的話,耦合度比較高.一旦想修改iproductdao的實現方式涉及到的地方就太多了. 使用unity實現依賴注入可以降低耦合.
1.建立unity配置檔案
xml version= "2.建立unitycontainermanager類建立unitycontainermanager讀取unity.config配置. 完整**見附件,重點看一下從unity.config讀取配置資訊的方法: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
">
private3.呼叫示例iunitycontainer loadunityconfig()
;//從config檔案中讀取配置資訊
var unitysection = (unityconfigurationsection)configuration.getsection("
unity");
var container = new
unitycontainer();
foreach (var item in
unitysection.containers)
return
container;
}
staticvoid main( string
args)
1.建立icallhandler介面實現類新建類logcallhandler類,實現介面icallhandler. 每次呼叫相應方法時會自動將執行時間寫入日誌.
public2.建立特性建立特性logtime,它需要實現handlerattribute.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
}
public3.使用特性class
logtimeattributes:handlerattribute
public
string msg
public
override
icallhandler createhandler(iunitycontainer container);}
}
[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節點下新增:>
<最後調整iproductdao的註冊節點:extension
type
= "interception "
/>
<呼叫處不用做調整,結果如下: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 ...