別の電信式の質問です。まず、私の NinjectModule:
using Ninject.Modules;
using Microsoft.Office.Interop.Word;
namespace NinjectSample.Util.Injection
{
public class SampleModule : NinjectModule
{
public override void Load()
{
Bind<_Application>().ToMethod(ctx => GetApp());
}
public _Application GetApp()
{
return new Application();
}
}
}
最初に(動作します!):
IKernel kernel = new StandardKernel(new SampleModule());
var foo = kernel.Get<_Application>();
これを
IKernel kernel = new StandardKernel(new SampleModule());
var foo = kernel.Get<BusinessClass>();
BusinessClass
別のアセンブリ、コードで定義されています:
namespace BusinessClassLibrary
{
public class BusinessClass
{
private _Application _app;
[Inject]
public BusinessClass(_Application application)
{
_app = application;
}
}
}
これにより、次の結果が得られます。
Error activating _Application
No matching bindings are available, and the type is not self-bindable.
Activation path:
2) Injection of dependency _Application into parameter application of constructor of type BusinessClass
1) Request for BusinessClass
Suggestions:
1) Ensure that you have defined a binding for _Application.
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
3) Ensure you have not accidentally created more than one kernel.
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.
5) If you are using automatic module loading, ensure the search path and filters are correct.
私は相互運用性についてあまり深くは知りませんが、.Net の基本的な理解から、次のことに遭遇することができます。
Application
base と同じようにインターフェース_Application
です。それでも、そのコンストラクターを呼び出すことは可能です。なんで?Ninject にファクトリ メソッドを使用するように指示します。これは、依存関係がカーネルが定義されているアセンブリにある場合に機能するようです。依存関係が別のアセンブリにある場合、自己バインディングによって依存関係を解決しようとするのはなぜですか?