簡體   English   中英

C#,Ninject:你把內核和模塊放在哪里?

[英]C#, Ninject: Where do you put the kernel and your modules?

我正在創建一個小型的C#應用​​程序,它目前包含一個核心程序集和一個winforms程序集。 我意識到我可能並不真的需要像這樣的小東西Ninject,但我想嘗試一下。

無論如何,與Ninject一起工作我已經明白你會寫一組模塊,返回map類,等等。 之后,您將創建一個IKernel實例並將模塊加載到該實例中。

但是,我在哪里保留這些模塊? 我在哪里保留內核? 東西去哪了?

您可以為內核創建靜態包裝類。 這樣你可以做一些像ServiceLocator.Resolve()

對於注冊服務,有兩種方式:內聯和模塊注冊。 它們都應該在bootstrapping時加載。 模塊更適合組織。

也許從StructureMap開始會更容易,因為它有靜態類,並且具有自動映射功能。

那些截屏視頻應該讓你開始:

馬立克的答案+1了 - 絕對可以瀏覽這些資源。

一些要點......

即使在一個小應用程序中,你也可以嘗試這樣做。 同樣重要的是要仔細思考表面上簡單的問題,比如你提出的問題。 對於DI,你真的必須真正做一些工作來真正欣賞它 - 我一個人在“哦,我只有一個小應用程序”(拒絕)陣營很長一段時間,直到我實際使用它。

雖然一個學校通常應該轉向服務定位器並且只是注射[沒有任何依賴於容器]。

如果你不使用服務定位器,沒有人需要知道Container(內核)的位置,這是最好的。

模塊主要用於划分批量事物以在特定的整體Container(內核)中注冊。

肯定有一個規范的'全球集裝箱'單身人士實施Ninject? 編輯:剛剛找到一個: - http://www.codethinked.com/creating-a-binding-factory-for-ninject

另請參見Ninject:如何注入類庫?

我的觀點:正如Marek所說,你應該為內核創建一些(可能是靜態的)包裝器,它包含IKernel實例。 它應該包含Resolve <T>方法,並且可能包含Load(INinjectModule模塊)方法 - 全部是靜態的。

在每個程序集中 ,您可以簡單地定義自己的INinjectModule ,它映射此程序集中的類。

內核包裝器位於“最低”,最常見的程序集(通常是Log和Utils所在的程序集)。 這是因為內核必須可以從所有部分訪問 - 因此它必須在程序集中,所有其他部分都可以引用它。 如果你沒有,你總是有足夠的自由來創建一個。 這可能看起來有點棘手,可以預期內核將處於“最高”程序集(可執行程序集)中。 不對。

要從程序集中注冊所有模塊,只需在每個模塊中調用Kernel.Load(new XXModule)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM