2012-07-19 31 views
0

我的一個小問題與我的簡單示例。Ninject擴展工廠中的NamedLikeFactoryMethod工作不符合文檔

我有簡單的工廠接口:

public interface ICameraFactory 
{ 
    ICameraController GetNikonCamera(); 
    ICameraController GetCanonCamera(); 
} 

我綁定它作爲一個工廠:

IKernel kernel = new StandardKernel(); 
kernel.Bind<ICameraFactory>().ToFactory(); 

當我嘗試轉換:

kernel.Bind<ICameraController>().To<NikonCameraController>() 
.Named("NikonCamera"); 

到:

kernel.Bind<ICameraController>().To<NikonCameraController>() 
.NamedLikeFactoryMethod<ICameraFactory>(f => f.GetNikonCamera()); 

它不能編譯。

例如,該代碼被編譯(但它的可怕):

kernel.Bind<ICameraController>() 
.ToMethod<ICameraController>(c=>new NikonCameraController()) 
.NamedLikeFactoryMethod<ICameraController, ICameraFactory>(f => f.GetNikonCamera()); 

我在做什麼錯? Ninject 3.0.1.10 Ninject.Extension.Factory 3.0.1.0

編譯錯誤:https://dl.dropbox.com/u/21806986/Screenshots/shot_19072012_133454.png

回答

5

您可以使用:

this.kernel.Bind<ICameraController>() 
      .To<NikonCameraController>() 
      .NamedLikeFactoryMethod((ICameraFactory f) => f.GetNikonCamera()); 
+0

謝謝你的答案,但我嘗試過了,也沒有工作。我有這樣的編譯錯誤: https://dl.dropbox.com/0/0view/23e0vwi9fnjtx5b/Apps/CloudShot/shot_19072012_180915.png – 2012-07-19 14:07:26

+0

但它的工作: 'kernel.Bind ()。ToMethod < ICameraController>(X =>新NikonCameraController())NamedLikeFactoryMethod (F => f.GetCanonEOSCamera());' 其中: '公共類NikonCameraController:ICameraController { //一些實施 }' – 2012-07-19 14:13:50

+0

Sry記錯了。第一個通用參數是實現類型(NikonCameraController)而不是接口類型。但是這種類型有更好的語法。查看更新的答案。 – 2012-07-19 14:26:16