私はお互いに依存する2つのクラスを持っています。明らかに、私が次のようにしてninjectを使用するとき:プロパティ注入が機能しない
public Class Class1()
{
private readonly class2;
public Class1(IClass2 class2)
{
this.class2 = class2;
}
}
public Class Class2()
{
private readonly class1;
public Class1(IClass1 class1)
{
this.class1 = class1;
}
}
これは循環依存関係になります。
私はこの問題を解決する方法が特性注入であることを知っています。私はプロパティを持つ二番目にコンストラクタで最初に注入したときに、
public Class Class2()
{
private readonly class1;
public Class1(IClass1 class1)
{
this.class1 = class1;
}
}
、逆の方法:本との組み合わせで
public Class Class1()
{
private readonly class2;
public Class1()
{
}
[Inject]
IClass2 Class2
{
get { return this.class2; }
set { this.class2 = value; }
}
}
:しかし、私はこれを試してみました。どちらも循環的な依存関係になります。 3つ目は、両方でプロパティインジェクションを使用すると、StackOverflow例外が発生します。このタイプの注入を実行する方法は何ですか?両方ともサービスクラスであることに留意してください。
バインディング:
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
try
{
kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
catch
{
kernel.Dispose();
throw;
}
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind(b => b
.From(Assemblies.ProjectServices) // link to the services there
.SelectAllClasses()
.BindDefaultInterface());
}
プロパティの注入は循環依存性を解決するはずですが、どこに例外がスローされるのかわかりますか? – YuvShap
私はClass1を注入するコントローラを持っています(それに依存します)。初期化しようとすると例外がスローされます。 – StefanL19
ninjectカーネルバインディングを表示できますか? – YuvShap