Ninject - 将依赖项注入命名空间

时间:2016-01-21 21:22:31

标签: c# ninject ninject-2

我正在尝试在将依赖项注入某个名称空间时有条件地绑定它。我在条件绑定中找到了一个N​​inject 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"));

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

  

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

知道我做错了吗?

1 个答案:

答案 0 :(得分:2)

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");
});
在您尝试直接解决ParentContext的情况下,

nullILogger