我的简单例子中有一个小问题。
我有简单的工厂界面:
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
答案 0 :(得分:5)
您可以使用:
this.kernel.Bind<ICameraController>()
.To<NikonCameraController>()
.NamedLikeFactoryMethod((ICameraFactory f) => f.GetNikonCamera());