【问题标题】:How to easily tell if Ninject can resolve a class如何轻松判断 Ninject 是否可以解析一个类
【发布时间】:2011-05-09 08:36:49
【问题描述】:

我正在将 Ninject 引入现有项目的一大堆混乱中。我想编写一个诊断测试,以确保 Ninject 最终创建的所有类实际上都可以由 Ninject 解决......而无需实际创建它们中的任何一个。

我想避免实际构造的原因是这些类中的许多都倾向于在其构造函数中启动数据库操作(sigh 是的,我知道)。否则我会通过 Get<T> 使用 try/catch 运行它们

【问题讨论】:

    标签: c# ioc-container ninject


    【解决方案1】:

    IResolutionRoot 上有一个 CanResolve 扩展名(即,如果你有正确的 usings,你可以使用它来对抗 Kernel)。有一个 CreateRequest 用于创建请求。如果您需要示例或任何更深入的信息,请查看源代码和测试。

    【讨论】:

      【解决方案2】:

      我知道这是一篇旧帖子,但它是我在搜索如何查找一个类是否可以由 Ninject 解析而无需实际调用 get() 并冒着异常风险时发现的第一个帖子。

      Ninject 3.0.2 版有一个 CanResolve 方法,它返回一个布尔值:

      kernel.CanResolve<T>()
      

      我从 nuget 获得 3.0.2,但它目前的市场不稳定 (Ninject.3.0.2-unstable-9037),所以我不确定我是否在生产中使用它。

      【讨论】:

      • 很遗憾,CanResolve 没有查看解析树。所以如果它缺少对二阶依赖的绑定,它不会告诉你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多