1
NinjectのNamedScopeモジュールがどのように動作するべきかを理解するのに苦労しています。私の考えでは、各(定義された)スコープは、 "InNamedScope"であるバインディングをコンテキスト化するために使用されるべきです。このおもちゃの例ではNinject NamedScopeの適切な使用
:私のために
void Main()
{
var kernel = new StandardKernel(new NamedScopeModule(), new ContextPreservationModule());
kernel.Bind<ParentC>().ToSelf().WithConstructorArgument("name", "Name1").DefinesNamedScope("scope1");
kernel.Bind<Intf>().ToConstant(new MyC() { ID = 1}).InNamedScope("scope1");
kernel.Bind<ParentC>().ToSelf().WithConstructorArgument("name", "Name2").DefinesNamedScope("scope2");
kernel.Bind<Intf>().ToConstant(new MyC() { ID = 2 }).InNamedScope("scope2");
kernel.GetAll<ParentC>().Dump();
}
public class Intf
{
int ID { get; set; }
}
public class MyC : Intf
{
public int ID { get; set; }
}
public class ParentC
{
public ParentC(Intf[] c, string name)
{
this.C = c;
Name = name;
}
public string Name { get; set; }
public Intf[] C { get; set; }
}
は、このような何か得られるはず:
をしかし、その代わりに、私はexeceptionを得る:
UnknownScopeException:スコープスコープ2は、UserQuery + Intfの起動中にエラーが発生しました。 現在の状況で知られている。
私は何が欠けていますか?
それは意味があります、私はninjectの範囲の目的を誤解したと思います。私が達成しようとしている拡張機能はありますか?あるいは、 'Named(..)'と 'WhenAnyAncestorNamed(..)'を使用する必要があります。 –
はい、 'Named(...)'と 'WhenAnyAncestorNamed(...)'がおそらく動作します。あなたのおもちゃの例は、別のSOの質問、https://stackoverflow.com/questions/43864334/ninject-binding-a-tree-of-dataを思い出させ、データ中心ではなくコンポーネントのグラフをバインドするためにNinjectを使用することをお勧めしますオブジェクト。 –
これは例を簡略化することに過ぎませんでした。実際の問題はNamedScopeを使って異なるクラスに異なるバインディングを使用しようとしていたことでした。助けてくれてありがとう。 –