2012-07-19 94 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