IoC/DIフレームワークは初めてです。私が最初に試しているのはNinjectフレームワークです。簡単そうに見えますが、コンソールアプリケーションを実行できません。次のようなActivationExceptionが発生し続けます。
"Error activating MainWindow: the StandardProvider returned an instance of type FutureRealisticDateManager, which is not compatible with the requested service.
Using default binding from MainWindow to FutureRealisticDateManager (via StandardProvider)
declared by DateBindingModule.Load()
Activation path:
1) active request for MainWindow
from Program.Main()
using default binding from MainWindow to FutureRealisticDateManager (via StandardProvider)
declared by DateBindingModule.Load()"
私のコードはとてもシンプルです。これが私のプログラムファイルです...
class Program
{
static void Main(string[] args)
{
IKernel k = new StandardKernel(new DateBindingModule());
MainWindow mw = k.Get<MainWindow>();
mw.Show();
Console.ReadLine();
}
}
これが私のninjectバインディングモジュールです...
public class DateBindingModule : StandardModule
{
public override void Load()
{
Bind<MainWindow>().To<FutureRealisticDateManager>();
}
}
これが注入されたクラスを受け取るクラスです...
class MainWindow
{
private IRealisticDateManager _d;
[Inject]
public MainWindow(IRealisticDateManager dateManager)
{
_d = dateManager;
}
public void Show()
{
Console.WriteLine("*** MainWindow [" + _d.GetRealisticDate().ToString() + "] ");
}
}
そして、これが実際に注入されているクラスです...
public class FutureRealisticDateManager : TestNinject.IRealisticDateManager
{
public DateTime GetRealisticDate()
{
return DateTime.Now.AddDays(15);
}
}
そして最後に、注入されたクラスが実装する必要がある単純なインターフェイス...
public interface IRealisticDateManager
{
DateTime GetRealisticDate();
}
誰かが私が間違っていることを見ることができますか?