无论如何都要获取实例注入的类名(使用ninject)?

时间:2013-01-22 12:54:12

标签: ninject

我正在将我的依赖项注入到我的类中,但是我想知道是否可以获取我正在注入的类名?

例如:

Bind<ISomething>.ToMethod(c => new Something([GIVE INJECTING *TO* CLASS NAME]));

所以,如果我有:

public class Blah{
  public Blah(ISomething something) { /**/ }
}

注入Ninject时实际上会调用:

new Blah(new Something("Blah"));

可以这样做吗?

2 个答案:

答案 0 :(得分:3)

是的,可以做到。您使用IContext方法中给出的ToMethod来获取您正在注入的类型的名称,如下所示:

Bind<ISomething>().ToMethod(c => new Something(GetParentTypeName(c)));

使用这个小帮手方法(也可以变成一个很好的扩展方法):

private string GetParentTypeName(IContext context)
{
    return context.Request.ParentRequest.ParentRequest.Target.Member.DeclaringType.Name;
}

答案 1 :(得分:0)

在Ninject的更高版本中可能已经改变了。对于版本v3.2.0,已接受的解决方案对我不起作用。

但以下情况确实如此:

Bind<ISomething>().ToMethod((ctx) 
       => new Something(ctx.Request.Target?.Member?.DeclaringType?.Name ?? ""));