我使用 Ninject 已经有一段时间了,我正试图弄清楚如何使用 app.config/web.config 条目来完成我在 Unity 中所做的事情。
我很确定这很简单,只是还没有找到实现它的最佳方法,当然 Ninject 也没有最好的文档。
我想对一个接口有不同的实现,而代码没有变化——特定的应用程序知道要使用哪个实现。
例如,当我使用 Unity 时,我会有一个实时应用程序和一个单元测试库,使用不同的数据库。所以:
var repo = IoC.Get<IRepository>();
将RealRepository
在我的实时应用程序中返回 a ,FakeRepository
在我的单元测试中返回 a 。我会简单地映射我的 app.config 或 web.config 中的类。
在 Ninject 中,由于您在代码中定义了映射,因此似乎没有办法决定您使用哪些实现(或哪个模块),除了在代码中 - 但当然整个目的是我不想要必须具体说明我要使用的实现。
有没有好的方法来做到这一点?我能想到的唯一方法是从配置文件中动态选择 NinjectModule 实现,但这感觉不对。