了解这个ninject绑定在做什么
本文关键字:什么 绑定 ninject 了解 | 更新日期: 2023-09-27 18:23:49
我正在构建一个基本的ninject容器来取代Caliburn.Micro中的电话容器,因为我想为多个项目使用一个IoC容器。再加上它的乐趣。。。
其中一种方法是注册电话服务,看起来像这样:
public void RegisterPhoneServices(bool treatViewAsLoaded = false)
{
var _phoneService = new PhoneApplicationServiceAdapter(_rootFrame);
var _navigationService = new FrameAdapter(_rootFrame, treatViewAsLoaded);
_kernel.Bind<INavigationService>().ToMethod(x => _navigationService);
_kernel.Bind<IPhoneService>().ToMethod(x => _phoneService);
_kernel.Bind<IEventAggregator>().To<EventAggregator>().InSingletonScope();
_kernel.Bind<IWindowManager>().To<WindowManager>().InSingletonScope();
_kernel.Bind<TaskController>().ToSelf().InSingletonScope();
var _taskController = Kernel.Get<TaskController>();
_taskController.Start();
}
我不明白的部分是,为什么INavigationService和IPhoneService像它们一样绑定到匿名方法,而不是标准绑定。
我认为原因是因为这是绑定到您已经定义了实例的对象的正确方法(就像上面几行中的情况一样),但我讨厌看到代码却不知道它的作用。我的假设正确吗?
deanvmc,
简而言之:是的,你说得对。
您使用的是Ninject工厂方法(请参阅http://bit.ly/AB9Eg9)。工厂可以退回任何类型的INavigationService
,如果您只是选择退回现有的PhoneApplicationServiceAdapter
干杯!
更好的方法是使用_kernel.Bind<INavigationService>().ToConstant(_navigationService)
。这将允许缓存绑定,而不必调用每次只返回相同对象的Func。