-1

情況上下文相關的注射構架

最近,我們開始尋找適合NInject的替代品。我們研究了Simple-Injector,AutoFac和StructureMap。但是在我們的測試中,我們無法重現的綁定,這是可能的NIinject,但不是在其他框架。

問題

假設我們有以下接口,常用的低谷多個應用程序:

public interface IRepository {...} 

public interface ILog {...} 

有一個默認的實現爲IRepository

public class DefaultRepository : IRepository { 
    public DefaultRepository(ILog logger) {...} 
} 

和兩個實現了ILog - 一個DefaultLogger和其他SimpleLogger。消耗

和兩個班的IRepository

public class Crypter { 
    public Crypter(IRepository repository) {...} 
} 

public class OtherService { 
    public OtherService(IRepository repository) {...} 
} 

我們要實現什麼是以下幾點:

  • 綁定ILogSimpleLogger當它被注入Crypter任何其他類注入它。在示例出的SimpleLogger將被注入到DefaultRepository將其注入到Crypter

  • 綁定ILogDefaultLogger對於所有其他的綁定。在我們的例子中DefaultLogger將被注入到DefaultRepository將其注入到OtherService

這是由於Crypter類(和它使用的任何服務)必須登錄到一個特殊的地方。但是我可以想象出可能適用的類似場景(例如,解決循環依賴)。

的問題(S)

  • 這是爲什麼無法在其他DI框架?如果是(帶有綁定或其他),請舉例說明。

  • 這是不常見的注射情況?

+0

經過一些額外的洞察,我看到這個問題基本上是如何將兩個完全獨立的問題合併爲一個 - 而第二個基本問題則是徵求意見。然而,我沒有看到如何改革問題以符合要求,所以我會保持原樣。可能對某人仍然有用。 – betelgewse

回答

4

爲什麼在其他DI框架中這是不可能的?

我不能說其他DI容器,但基於上下文的注射由Simple Injector支持。只要看看Context based injection in the documentation

除此之外,大約有無數的問題#1本,如:

這難道不是一個通常的注射情況?

這取決於。簡單注射器文檔states

在許多情況下,基於上下文注入是不是最好的解決方案,設計應重新評估。但在一些狹窄的情況下,它可能是有道理的。

常見的基於上下文的注入濫用是爲了解決Liskov Substitution Principle違規問題。