NamedLikeFactoryMethod в Ninject Extensions Factory работает с несоблюдением документации

У меня есть небольшая проблема с моим простым примером.

У меня простой заводской интерфейс:

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

Я привязываю его как заводской:

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

Когда я пытаюсь конвертировать:

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

to:

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


person Dvor_nik    schedule 19.07.2012    source источник


Ответы (1)


Вы можете использовать:

this.kernel.Bind<ICameraController>()
           .To<NikonCameraController>()
           .NamedLikeFactoryMethod((ICameraFactory f) => f.GetNikonCamera());
person Remo Gloor    schedule 19.07.2012
comment
Спасибо за ответ, но я пробовал, и это не сработало. У меня такая ошибка компиляции: dl.dropbox.com/0 /view/23e0vwi9fnjtx5b/Apps/CloudShot/ - person Dvor_nik; 19.07.2012
comment
Но это работа: kernel.Bind<ICameraController>().ToMethod<ICameraController>(x => new NikonCameraController()).NamedLikeFactoryMethod<ICameraController, ICameraFactory>(f => f.GetCanonEOSCamera()); Где: public class NikonCameraController : ICameraController { //Some implementation } - person Dvor_nik; 19.07.2012
comment
Сри неправильно это имел в виду. Первый общий аргумент — это тип реализации (NikonCameraController), а не тип интерфейса. Но есть лучший синтаксис без этого типа. Смотрите обновленный ответ. - person Remo Gloor; 19.07.2012
comment
Спасибо за ответ и за Extension.Factory! Это работает нормально. Я думаю, это можно добавить в вики (как лучшие практики). - person Dvor_nik; 19.07.2012