有一个概念:上下文绑定——几乎所有的依赖注入容器都实现了它。实际上,这意味着您可以将条件添加到绑定中。这是使用ninject的示例
定义“生产”环境条件
例如 byEnvironment.MachineName
或任何其他适合您的方式:
private static readonly Func<bool> IsCurrentEnvironmentProduction =
() => Environment.MachineName == "Production.Server";
为不同的环境定义绑定
public static IKernel InitializeKernel()
{
var kernel = new StandardKernel();
// binding for production
kernel
.Bind<IBackend>()
.To<ProdBackend>()
.When(request => IsCurrentEnvironmentProduction());
// binding for test environment
kernel
.Bind<IBackend>()
.To<TestBackend>()
.When(request => !IsCurrentEnvironmentProduction());
return kernel;
}
解析实例取决于环境
DI 容器将为您完成所有工作
var backend = kernel.Get<IBackend>();
完整样本可在此处获得
关于 Mono 的备注
根据Ninject 下载,有一个 Mono 版本,但您也可以在其他 DI 容器中实现相同的功能