譯 使用Ninject進行簡單依賴注入

2021-09-22 10:50:31 字數 1852 閱讀 3155

那些最好的程式能夠容納不斷變化的需求,當然,要求程式滿足所有需求卻難如登天。這就是該依賴注入發揮作用的時候了.依賴注入的最終目的是達到松耦合,而松耦合可以讓程式在不重新編譯的情況下通過配置程式來改變程式的某些部分。下面通過乙個demo來展現ninject

我們建立乙個汽車模擬器程式,所有的汽車都需要燃料,而燃料的種類卻多種多樣,我們需要告訴這個模擬器使用何種燃料,讓我們來做第一次嘗試:

// unleaded.cs 

public class unleaded   } 

// diesel.cs 

public class diesel  

// car.cs 

public class car     

public car()  

public void start()  

}  // driver.cs 

public class driver   }

這滿足了最開始的要求,但是如果我們需要使用其它品種的燃料呢?我們不得不為此改變car物件裡的**,這種做法是緊耦合的。因此,可是使用更好的方式,因為每一種燃料都是通過燃燒來產生熱量,所以可以將其重構為介面:

// ifuel.cs

public inte***ce ifuel

接下來,所有的燃料型別都繼承ifuel介面

public class unleaded : ifuel

public class diesel : ifuel

因此,可以將car的燃料屬性改為ifuel

private ifuel fuel

通過這種方式依然有問題,因為車仍然需要在指定使用何種燃料,這種方式在asp.net mvc 2 part – creating data repositories裡我進行了簡短的討論,稱之為構造器注入,因為指定使用何種屬性是通過構造器來完成的。

我們通過將car的構造器進行改變,接受ifuel型別的引數並賦值給燃料屬性來完成:

public car(ifuel _fuel)

這是我們就需要在driver初始化類中初始化car例項來指定相應物件

public driver()

雖然我們通過這種方式貌似降低了耦合,但是driver物件仍然需要在**中知道使用何種燃料。而我們希望達到的效果是在程式外部來指定。

使用ninject,ninject是.net依賴注入庫中的一種,首先通過引用ninject.core.dll來進行引入,並在car.cs中using ninject.core.

任何我們想實現依賴注入的地方我們都的賦予[inject]標籤,在此,對燃料加上這個標籤:

[inject]

private ifuel fuel

下面一步是進行配置這部重頭戲,配置資訊會被包含在ninject.core.startardmodule的派生類當中,在此我們通過繼承這個類並重寫load方法來實現依賴資訊的設定:

using ninject.core;

...public class fuelmodule : standardmodule }

load方法中使用了ninject的fluent介面中的方法來告訴程式中ifuel介面的型別是柴油(diesel)

接下來我們還需要建立ninject管理的乙個型別,在這裡我們使用」kernel」,這個型別的建構函式接受乙個包含注入資訊的module(一般是從從standardmodule派生而來),在這裡是fuelmodule,然後我們」kernel」會給予我們相應的型別:

public driver4()

在此,當需要改變燃料時,僅需要改變fuelmodule就可以.

上面的方法還可以用於改變資料庫倉儲的型別,比如在測試的時候我們可以換掉資料庫而通過連線乙個虛擬的資料從而使測試更加輕鬆愉快:-)

譯 使用PhantomJS進行網頁剪報

原文 phantomjs的乙個主要用途就是用來抓取網頁並將它渲染成.在渲染時有很多選項可供調整,其中最常用的乙個就是縮放選項 調整zoomfactor屬性的值 它經常會被用在製作縮圖的場景下.另外乙個不怎麼被人熟知的選項就是 按指定矩形區域渲染 選項 調整cliprect 屬性的值 也就是生成的只包...

使用 CGContextRef 進行簡單內容繪製

摘要 cgcontextref 功能強大,我們借助它可以畫各種圖形。這裡所舉例子只是簡單內容繪製,冰山一角,對此感興趣的朋友可以舉一反三,實現各種酷炫效果。效果如下 pragma mark 繪製 文字 線條 圓形 矩形 30 void drawfont 3536 我是文字 drawinrect cg...

使用requests模組進行簡單爬蟲

我最近在學習python爬蟲相關的內容,打算學一點寫一點,一邊總結一邊學習。使用requests模組可以對一些缺乏反爬蟲限制的 進行爬取。本次爬取的是貓眼的電影排行,利用url中offset的設定即可爬取前十頁每一頁的html 再通過re模組使用正規表示式提取網頁中我們需要的成分,然後將這些成分以字...