2012-08-01 61 views
1

我需要根據調用者有條件地撰寫實例。調用者上下文綁定NInject

在某些情況下,我需要一個複合對象實例,在其他情況下,「深」型「NullService」

我,而不是注入「ConcreteService」

我希望這樣的事情:

Get<Root>.with(NullService) 

Get<Root>.with(ConcreteService) 

或者更好的是如果能結合的C以致它可以追溯到呼叫環境

Bind<IService>.to(ConcreteService). 
Bind<IService>.to(NullService).only.whenCallerIsTypeOf(CallerWhosNeedsANullService) 

是否有可能?

+2

你有什麼樣的情況?配置值,運行時間條件,用戶輸入,... – 2012-08-02 11:36:12

+0

運行時間條件。 特別是在一個ASP.net應用程序中作爲被調用頁面的函數。 爲此,我寫道: '綁定 .to(NullService).only.whenCallerIsTypeOf(CallerWhoseNeedsANullService)' – Martino 2012-08-10 07:44:11

回答

1

有兩種方式:

  1. 使用一個自身條件的情況下,就可以計算出哪一個應該使用:

    Bind<IService>.To(NullService) 
        .When(ctx => IsCallerWhosNeedsANullService(HttpContext.Current.Request)); 
    
  2. 使用命名綁定

    Bind<Root>().ToSelf().Named("DefaultRoot"); 
    Bind<Root>().ToSelf().Named("NullRoot"); 
    Bind<IService>.To(ConcreteService); 
    Bind<IService>.To(NullService).WhenAnyAnchestorNamed("NullRoot"); 
    
    Get<Root>("NullRoot");