2016-07-08 152 views
0

我有一個內部的類庫,我已經構建使用依賴注入(ninject)。它被各種項目使用; MVC,Windows服務的REST API等在類庫中是否有依賴注入的解決方法?

我只是有一類像這樣:

public class KittenInvestigator 
{ 
    [Inject] 
    public IKittenDetectorDevice KittenDetectorDevice { get; set; } 

    ... 
} 

谷歌搜索的問題死我發現它是不可能在類庫來初始化ninject因爲有沒有'啓動'方法或掛鉤。

我正在尋找解決方法。有大量關於這個問題的帖子,但我找不到任何解決方案或解決方法。有任何想法嗎?

有些事情我已經考慮:

  • 把綁定到項目引用庫。這是非常糟糕的,因爲注入是在庫內部使用的,所以外部組件不應該知道它 - 它們必須神奇地知道要添加這些綁定,否則庫不起作用。

  • 某種反射,使我的ninject代碼在主項目中掃描ninject模塊的所有程序集並初始化它們。

  • 類庫中的靜態初始化方法,必須由主項目調用,它將設置ninject的東西(看起來很俗氣)。

  • 其他一些聰明的設計。

+0

我不太明白你的問題。你會在哪裏把代碼爲什麼Ninject不能注入到這個類? – suvroc

+0

設置ninject?庫中沒有啓動方法。 – NibblyPig

+0

試試http://stackoverflow.com/a/10191282/4772988 – suvroc

回答

1

您可以有一個啓動方法,創建一個名爲bootstrapper的靜態類,並在靜態構造函數中執行DI容器的組合。

+0

啓動方法在哪裏?在引用類庫的主項目中? – NibblyPig

+0

運行引用庫的項目時,將執行靜態構造函數。 –

0

可能使用Fody.ModuleInit來加載它的程序集時自動引導庫。但我不會推薦它,而是操作之一:

  • 由馬克·西曼描​​述去的明確的方法(和其史蒂芬已經提供了一個鏈接,以你的信息進行評論:DI friendly library
  • 精心之後稱重的優點和缺點選擇使用ninject模塊和使用Dynamic Module Loading或類似的東西,但定製。