亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【轉】 依賴注入框架Autofac的簡單使用

2019-11-17 02:13:18
字體:
來源:轉載
供稿:網友

【轉】 依賴注入框架Autofac的簡單使用

Autofac是一款IOC框架,比較于其他的IOC框架,如SPRing.NET,Unity,Castle等等所包含的,它很輕量級性能上也是很高的。于是,今天抽空研究了下它。下載地址:http://code.google.com/p/autofac/downloads/list

1)解壓它的壓縮包,主要看到Autofac.dll,Autofac.Configuration.dll,這也是本篇文章重點使用的Autofac的類庫。

2)創建一個控制臺工程,并且引用以上的DLL文件。創建一個數據庫操作接口IDatabase.cs:

///<summary> ///DatabaSEOperateinterface ///</summary> publicinterfaceIDatabase { stringName{get;} voidSelect(stringcommandText); voidInsert(stringcommandText); voidUpdate(stringcommandText); voidDelete(stringcommandText); }

這里包含CRUD四種操作的方法。

3)創建兩種數據庫的操作類,SqlDatabase.cs以及OracleDatabase.cs:

publicclassSqlDatabase:IDatabase { publicstringName { get{return"sqlserver";} } publicvoidSelect(stringcommandText) { Console.WriteLine(string.Format("'{0}'isaquerysqlin{1}!",commandText,Name)); } publicvoidInsert(stringcommandText) { Console.WriteLine(string.Format("'{0}'isainsertsqlin{1}!",commandText,Name)); } publicvoidUpdate(stringcommandText) { Console.WriteLine(string.Format("'{0}'isaupdatesqlin{1}!",commandText,Name)); } publicvoidDelete(stringcommandText) { Console.WriteLine(string.Format("'{0}'isadeletesqlin{1}!",commandText,Name)); } }

以及

publicclassOracleDatabase:IDatabase { publicstringName { get{return"oracle";} } publicvoidSelect(stringcommandText) { Console.WriteLine(string.Format("'{0}'isaquerysqlin{1}!",commandText,Name)); } publicvoidInsert(stringcommandText) { Console.WriteLine(string.Format("'{0}'isainsertsqlin{1}!",commandText,Name)); } publicvoidUpdate(stringcommandText) { Console.WriteLine(string.Format("'{0}'isaupdatesqlin{1}!",commandText,Name)); } publicvoidDelete(stringcommandText) { Console.WriteLine(string.Format("'{0}'isadeletesqlin{1}!",commandText,Name)); } }

4)接著創建一個數據庫管理器DatabaseManager.cs:

publicclassDatabaseManager { IDatabase_database; publicDatabaseManager(IDatabasedatabase) { _database=database; } publicvoidSearch(stringcommandText) { _database.Select(commandText); } publicvoidAdd(stringcommandText) { _database.Insert(commandText); } publicvoidSave(stringcommandText) { _database.Update(commandText); } publicvoidRemove(stringcommandText) { _database.Delete(commandText); } }

5)在控制臺中,編寫以下測試程序:

varbuilder=newContainerBuilder(); builder.RegisterType<DatabaseManager>(); builder.RegisterType<SqlDatabase>().As<IDatabase>(); using(varcontainer=builder.Build()) { varmanager=container.Resolve<DatabaseManager>(); manager.Search("SELECT*FORMUSER"); }

運行結果:

image

分析:

這里通過ContainerBuilder方法RegisterType對DatabaseManager進行注冊,當注冊的類型在相應得到的容器中可以Resolve你的DatabaseManager實例。

builder.RegisterType<SqlDatabase>().As<IDatabase>();通過AS可以讓DatabaseManager類中通過構造函數依賴注入類型相應的接口。

Build()方法生成一個對應的Container實例,這樣,就可以通過Resolve解析到注冊的類型實例。

同樣地,如果你修改數據庫類型注冊為:

builder.RegisterType<OracleDatabase>().As<IDatabase>();

運行結果:

image

6)顯然以上的程序中,SqlDatabase或者OracleDatabase已經暴露于客戶程序中了,現在我想將該類型選擇通過文件配置進行讀取。Autofac自帶了一個Autofac.Configuration.dll 非常方便地對類型進行配置,避免了程序的重新編譯。

修改App.config:

<configuration> <configSections> <sectionname="autofac"type="Autofac.Configuration.SectionHandler,Autofac.Configuration"/> </configSections> <autofacdefaultAssembly="AutofacDemo"> <components> <componenttype="AutofacDemo.SqlDatabase,AutofacDemo"service="AutofacDemo.IDatabase"/> </components> </autofac> </configuration>

通過Autofac.Configuration.SectionHandler配置節點對組件進行處理。

對應的客戶端程序改為:

varbuilder=newContainerBuilder(); builder.RegisterType<DatabaseManager>(); builder.RegisterModule(newConfigurationSettingsReader("autofac")); using(varcontainer=builder.Build()) { varmanager=container.Resolve<DatabaseManager>(); manager.Search("SELECT*FORMUSER"); }

運行結果:

image

7)另外還有一種方式,通過Register方法進行注冊:

var builder = new ContainerBuilder(); //builder.RegisterType<DatabaseManager>(); builder.RegisterModule(new ConfigurationSettingsReader("autofac")); builder.Register(c => new DatabaseManager(c.Resolve<IDatabase>())); using (var container = builder.Build()) {     var manager = container.Resolve<DatabaseManager>();     manager.Search("SELECT * FORM USER"); }

得到結果也是一樣的。

8)現在我想通過一個用戶類來控制操作權限,比如增刪改的權限,創建一個用戶類:

///<summary> ///IdIdentityInterface ///</summary> publicinterfaceIdentity { intId{get;set;} } publicclassUser:Identity { publicintId{get;set;} publicstringName{get;set;} }

修改DatabaseManager.cs代碼:

publicclassDatabaseManager { IDatabase_database; User_user; publicDatabaseManager(IDatabasedatabase):this(database,null) { }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品女同一区二区三区在线播放| 日韩一级裸体免费视频| 欧美亚洲一区在线| 精品亚洲一区二区三区在线观看| 91理论片午午论夜理片久久| 欧美一级视频一区二区| 91亚洲精品久久久久久久久久久久| 欧美一区三区三区高中清蜜桃| 欧美人与物videos| 亚洲性69xxxbbb| 久久久久久亚洲精品不卡| 国产精品啪视频| 国产精品露脸自拍| 中文字幕国产亚洲2019| 欧美日韩性视频| 在线观看91久久久久久| 欧美精品videossex性护士| 狠狠综合久久av一区二区小说| 午夜精品久久久久久久99黑人| 一区二区三区视频观看| 国产又爽又黄的激情精品视频| 91在线观看免费高清完整版在线观看| 亚洲欧洲av一区二区| 亚洲黄页网在线观看| 国产精品爽黄69天堂a| 亚洲最新av在线网站| 欧美日在线观看| 最近2019年手机中文字幕| 国产视频在线观看一区二区| 日韩精品免费在线播放| 亚洲第一精品福利| 国内免费精品永久在线视频| 国产精品露脸av在线| 久久久久久久久电影| 亚洲精品久久视频| 亚洲精品久久久久久久久久久| 亚洲在线观看视频| 日韩国产精品亚洲а∨天堂免| 国产精品普通话| 亚洲日本成人网| 亚洲欧美激情四射在线日| 福利一区视频在线观看| 成人国产亚洲精品a区天堂华泰| 欧美成年人视频网站欧美| 欧美性xxxxx| 欧美黑人巨大xxx极品| 欧美日韩一区二区三区在线免费观看| 亚洲黄色av女优在线观看| 国产成人精品视频在线观看| 亚洲跨种族黑人xxx| 黄色精品在线看| 精品福利樱桃av导航| 97超级碰碰人国产在线观看| 97av在线视频| 日韩精品极品视频| 精品国产31久久久久久| 亚洲一区二区三区在线免费观看| 精品福利樱桃av导航| 亚洲成人黄色在线| 日韩在线视频观看正片免费网站| 伊人成人开心激情综合网| 亚洲男人天堂九九视频| 疯狂做受xxxx欧美肥白少妇| 亚洲视频在线免费看| 理论片在线不卡免费观看| 欧美亚洲免费电影| 欧美激情亚洲自拍| 欧美激情xxxx| 亚洲欧美日韩国产中文专区| 日韩一区二区在线视频| 欧美视频专区一二在线观看| 久久久久久久久电影| 日本欧美中文字幕| 5278欧美一区二区三区| 欧美极品少妇xxxxx| 国产精品久久久久久久久久东京| 国产精品美女呻吟| 最新中文字幕亚洲| 亚洲国产精品人久久电影| 亚洲高清av在线| 欧美理论电影网| 亚洲色图25p| www.亚洲成人| 欧美成人精品三级在线观看| 91最新在线免费观看| 国产在线观看精品| 精品福利在线观看| 精品国产乱码久久久久久婷婷| 亚洲国产精久久久久久久| 九色精品免费永久在线| 欧美性黄网官网| 午夜精品久久久久久99热软件| 久久国产精品网站| 日韩中文娱乐网| 亚洲欧美一区二区三区情侣bbw| 日韩福利在线播放| 成人黄色片在线| 亚洲视频axxx| 国产一区二区三区久久精品| 欧美性高潮在线| 8050国产精品久久久久久| 亚洲国产第一页| 91久久久久久久久久久久久| 成人综合网网址| 国产精品永久免费视频| 亚洲综合日韩中文字幕v在线| 精品久久久香蕉免费精品视频| 精品久久久久人成| 久久影院资源站| 高清亚洲成在人网站天堂| 欧日韩在线观看| 久久九九国产精品怡红院| 国产成人高清激情视频在线观看| 欧美在线播放视频| 欧美日韩人人澡狠狠躁视频| 久久久久久久久久久91| 91精品国产色综合| 精品日韩视频在线观看| 91人人爽人人爽人人精88v| 亚洲白拍色综合图区| 按摩亚洲人久久| 欧美福利视频在线观看| 欧美午夜宅男影院在线观看| 欧美激情在线观看| 欧美日韩xxxxx| 欧美午夜美女看片| 一本色道久久88综合日韩精品| 姬川优奈aav一区二区| 91国偷自产一区二区三区的观看方式| 亚洲精品国精品久久99热| 性欧美办公室18xxxxhd| 亚洲欧美日韩另类| 国内外成人免费激情在线视频网站| 欧美日韩精品在线| 亚洲视频777| 美女啪啪无遮挡免费久久网站| 久久久久久国产精品| 一区二区三欧美| 亚洲网站视频福利| 国产一区二区三区三区在线观看| 亚洲精品日韩在线| 日韩在线观看免费av| 欧美午夜www高清视频| 精品偷拍一区二区三区在线看| 精品中文视频在线| 国产免费成人av| 久久成人精品电影| 这里只有精品在线播放| 国产一区玩具在线观看| 91在线精品播放| 国产亚洲欧美视频| 国产69精品久久久久9999| 国产精品人成电影在线观看| 欧美性高潮在线| 国产精品视频自拍| 91精品视频在线播放| 国产va免费精品高清在线观看| 中文字幕九色91在线| 国模gogo一区二区大胆私拍| 精品国产1区2区| 热久久视久久精品18亚洲精品| 国产一区av在线| 最近2019中文字幕一页二页| 亚洲精品中文字幕女同|