了解这个ninject绑定正在做什么

时间:2012-02-09 11:42:43

标签: c# caliburn.micro ninject-2

我正在构建一个基本的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绑定到匿名方法的原因,而不是标准绑定。

THINK 原因是因为这是绑定到已经为其定义实例的对象的正确方法(如上面的行中的情况)但是我讨厌查看代码和不知道它做了什么。我的假设是正确的吗?

2 个答案:

答案 0 :(得分:1)

deanvmc,

简而言之:是的,你是对的。

您正在使用Ninject工厂方法(请参阅http://bit.ly/AB9Eg9)。工厂可以退回任何类型的INavigationService,您只需选择退回现有的PhoneApplicationServiceAdapter

干杯!

答案 1 :(得分:1)

更好的方法是使用_kernel.Bind<INavigationService>().ToConstant(_navigationService)这将允许缓存绑定,而不必每次都调用只返回相同对象的Func。