2016-01-21 80 views
0

我试图在注入某个名称空间时有条件地绑定依赖项。我在条件绑定中发现了一个Ninject article,它表示如下:Ninject - 向名称空间注入依赖项

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

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

x.Target.Type会给你你试图解决的依赖。在你的情况下,这是​​。

我猜你的意思是将逻辑基于​​将被注入的对象类型。在这种情况下,你需要使用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"); 
}); 

ParentContextnull的情况下尝试直接解决​​。