Привязка IDatabaseInitializer <> в моем тесте для проверки моего инициализатора контекста данных (EntityFramework 4.1, также известный как EF4 Code First) - PullRequest
0 голосов
/ 15 апреля 2011

Я пытаюсь внедрить инициализатор базы данных, чтобы я мог использовать инициализатор тестовых данных в моем модульном тесте, а реальный - в производстве.

Вот мой вспомогательный модуль.

class IocBindings : NinjectModule
{
    public override void Load()
    {
        Bind<DbContext>()
            .To<ActualEntityFrameworkDataContext>();

        Bind(typeof(IDatabaseInitializer<>))
            .To(typeof(TestDataContextInitializer));

    }
}

Как видите, определена только одна привязка; однако, когда я запускаю тест, он терпит неудачу со следующим исключением:

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();
    }
}

Я новичок в nject, поэтому не уверен, правильно ли я его настроил.

любая помощь в решении этой проблемы очень приветствуется.

Приветствия

1 Ответ

1 голос
/ 16 апреля 2011

Я не уверен, в чем проблема с моим исходным кодом, но если я использую следующую строку кода, я не получу исключения. Очевидно, это единственный обходной путь!

Bind<DbContext>()
            .To<ActualEntityFrameworkDataContext>()
            .OnActivation(dbContext => (new TestDataContextInitializer()).InitializeDatabase(dbContext as ActualEntityFrameworkDataContext));
...