【问题标题】:Understanding what this ninject bind is doing了解这个 ninject 绑定在做什么
【发布时间】:2012-02-09 11:42:43
【问题描述】:

我正在构建一个基本的 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 原因是因为这是绑定到您已经为其定义实例的对象的正确方法(如上面几行中的情况),但我讨厌看到代码和不知道它做了什么。我的假设是否正确?

【问题讨论】:

    标签: c# caliburn.micro ninject-2


    【解决方案1】:

    deanvmc,

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

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

    干杯!

    【讨论】:

    • 甜蜜,干杯,当我查看代码时,我很确定它在做什么,但我真的想在使用它之前确定一下。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-08
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多