0

私の単純な例には小さな問題があります。

私はシンプルな工場インターフェースを持っています:

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

4

1 に答える 1

5

以下を使用できます。

this.kernel.Bind<ICameraController>()
           .To<NikonCameraController>()
           .NamedLikeFactoryMethod((ICameraFactory f) => f.GetNikonCamera());
于 2012-07-19T12:13:05.613 に答える