Можно ли удалить отображение во время выполнения? Я могу добавить один достаточно легко с помощью:
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
Кажется, что я не могу сказать структуре карты удалить тип по умолчанию, поэтому я добавил новую реализацию интерфейса по умолчанию и расширил интерфейс, чтобы иметь свойство, указывающее, активен ли он. Реализация по умолчанию указывает, что интерфейс не активен. Так что теперь я всегда могу получить экземпляр, а затем проверить, хочу ли я его использовать.
Система имеет довольно мало поведения, характерного для даты и времени, поэтому клиент должен иметь возможность протестировать поведение системы в разные даты и время. Они входят в раздел администратора и затем устанавливают дату и время в соответствующие значения, а затем я переключаю реализацию по умолчанию на реализацию теста, которая вносит соответствующие изменения.
Поскольку меняется только реализация интерфейса, я просто переключаю, какую реализацию я хочу использовать, когда ее устанавливает клиентский администратор, и затем сбрасываю ее, когда они сделаны.