単体テストでテストデータ初期化子を使用し、本番環境で実際のデータ初期化子を使用できるように、データベース初期化子を挿入しようとしています。
これが私のninjectモジュールです。
class IocBindings : NinjectModule
{
public override void Load()
{
Bind<DbContext>()
.To<ActualEntityFrameworkDataContext>();
Bind(typeof(IDatabaseInitializer<>))
.To(typeof(TestDataContextInitializer));
}
}
ご覧のとおり、定義されているバインディングは 1 つだけです。ただし、テストを実行すると、次の例外が発生して失敗します。
Ninject.ActivationException : Error activating IDatabaseInitializer{TContext} More than one matching bindings are available.
カーネルをインスタンス化し、それを共通サービスロケーターに渡すベーステストフィクスチャがあります。
[TestFixture]
public class TestContext
{
private IKernel NinjectKernel { get; set; }
[SetUp]
public void setup()
{
NinjectKernel = new StandardKernel(new INinjectModule[] { new IocBindings() } );
ServiceLocator.SetLocatorProvider(() => new NinjectServiceLocator(NinjectKernel));
}
[TearDown]
public void TearDownAttribute()
{
NinjectKernel.Dispose();
}
}
私はninjectを初めて使用するので、正しく設定したかどうかわかりません。
この問題を解決する方法についてのヘルプは大歓迎です。
乾杯