2

依存関係をクラスに正常に注入していますが、注入しているクラス名を取得できるかどうか疑問に思っています。

例えば:

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

だから、もし私が持っていたら:

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

Ninjectを注入すると、実際には次のように呼び出されます。

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

これはできますか?

4

2 に答える 2

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;
}
于 2013-01-22T13:03:49.747 に答える
0

Ninjectの新しいバージョンではおそらく変更されています。バージョンv3.2.0に関しては、受け入れられたソリューションは私には機能しませんでした。

ただし、次のことを行います。

Bind<ISomething>().ToMethod((ctx) 
       => new Something(ctx.Request.Target?.Member?.DeclaringType?.Name ?? ""));
于 2017-06-21T09:23:46.497 に答える