【问题标题】:Ninject - Injecting a dependency into a namespaceNinject - 将依赖项注入命名空间
【发布时间】:2016-04-28 08:08:24
【问题描述】:

我正在尝试在将依赖项注入某个命名空间时有条件地绑定它。我在条件绑定中找到了一个 Ninject article,它说以下内容:

我们还可以通过提供委托来提供条件逻辑。在这种情况下,询问类的名称和命名空间。

Bind().To().When(request => request.Target.Member.Name.StartsWith("ClassName")); Bind().To().When(request => request.Target.Type.Namespace.StartsWith("NameSpace.ClassName"));

所以我尝试如下实现:

Bind<ILogger>().ToMethod(x => new Logger("commissionServiceLogger")).When(x => x.Target.Type.Namespace.StartsWith("My.App.CommissionService"));

我得到一个空引用异常,但是:

对象引用未设置为对象的实例。

知道我做错了什么吗?

【问题讨论】:

    标签: c# ninject ninject-2


    【解决方案1】:

    x.Target.Type 会给你你想要解决的依赖。在你的情况下,这是ILogger。

    我猜您的意思是将逻辑基于要注入ILogger 的对象类型。在这种情况下,您需要像这样使用x.ParentContext.Plan.Type:

    Bind<ILogger>().ToMethod(x => new Logger("commissionServiceLogger")).When(x =>
    {
        return x.ParentContext != null &&
             x.ParentContext.Plan
             .Type.Namespace
             .StartsWith("My.App.CommissionService");
    });
    

    在您尝试直接解析ILogger 的情况下,ParentContext 将是null。

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多