我正在尝试在将依赖项注入某个名称空间时有条件地绑定它。我在条件绑定中找到了一个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"));
我得到一个空引用异常,但是:
对象引用未设置为对象的实例。
知道我做错了吗?
答案 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
的情况下, null
为ILogger
。