0

我正在尝试注入我的数据库初始化程序,以便我可以在单元测试中使用测试数据初始化程序并在生产中使用真实的初始化程序。

这是我的 ninject 模块。

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

我是 ninject 的新手,所以我不确定我是否正确设置了它。

非常欢迎任何有关如何解决此问题的帮助。

干杯

4

1 回答 1

1

我不确定我的源代码有什么问题,但是如果我使用下面的代码行,我也不会例外。显然,这是唯一的解决方法!

Bind<DbContext>()
            .To<ActualEntityFrameworkDataContext>()
            .OnActivation(dbContext => (new TestDataContextInitializer()).InitializeDatabase(dbContext as ActualEntityFrameworkDataContext));
于 2011-04-15T21:33:21.923 回答