【发布时间】:2011-01-10 10:47:12
【问题描述】:
是否可以在运行时删除映射?我可以很容易地添加一个:
ObjectFactory.Configure(ce =>
ce.ForRequestedType<IDateAdjuster>().
TheDefaultIsConcreteType<DateAdjusterForTest>());
我可以检查是否存在映射
ObjectFactory.Model.HasDefaultImplementationFor<IDateAdjuster>()
但我似乎无法删除默认实例类型。我试过这个
var config = ObjectFactory.Model.PluginTypes
.FirstOrDefault(pt => pt.PluginType == typeof(IDateAdjuster));
if (config != null) {config.Default = null;}
但这不起作用。
界面的作用是隐藏DateTime.Now 和DateTime.Today 属性,以便在测试期间,特别是集成和用户接受期间,系统可以配置为根据它看到的改变当前日期和时间。
我想做的是检查接口是否有默认实现,如果有,我会创建并调用它,如果没有,我就使用DateTime.Now 和DateTime.Today
似乎我无法告诉结构映射删除默认类型,所以我现在添加了一个新的接口默认实现并将接口扩展为具有一个属性来指示它是否处于活动状态。默认实现表示接口未激活。所以现在我总能得到一个实例,然后检查我是否想使用它。
系统有很多特定于日期和时间的行为,因此客户端需要能够测试系统在不同日期和时间的行为。他们登录到管理部分,然后将日期和时间设置为适当的值,然后我将默认实现切换到进行适当调整的测试实现。
因为只有接口的实现会发生变化,所以我只是在客户端管理员设置它时切换我想要使用的实现,然后在它们完成后重置它
【问题讨论】:
标签: c# dependency-injection structuremap ioc-container