Я использую StructurMap (только что обновленный до 2.6.1) и Smart Model Binder Джимми Богарда в моем приложении NET MVC 2. Я также адаптирую технику от Доминика Петтифера , чтобы вы могли использовать связыватель интеллектуальной модели для внедрения DI в ваши viewModels для сценариев обратной передачи, где списки выбора должны быть повторно заполнены!
Я очень мало знаю о StructureMap
, и одна из проблем, которые я получал, была structuremap 202 no instance defined error
для привязки viewModel с конструкторами без параметров.
Так что в моем IOCMOdelBinder class
я пытаюсь использовать TryGetInstance()
вместо GetInstance()
, так как первый возвращает ноль, если нет совпадения с modelType. В основном, если он не находит зарегистрированный экземпляр, тогда используйте привязку к модели по умолчанию.
Мой переопределение CreateModel
класс выглядит так:
protected override object CreateModel(ControllerContext controllerContext,
ModelBindingContext bindingContext, Type modelType)
{
var myInstance = ObjectFactory.TryGetInstance(modelType);
if (myInstance != null)
{
return myInstance;
}
else
{
return base.CreateModel(controllerContext, bindingContext, modelType);
}
}
Я вынул строку ObjectFactory.GetInstance(modelType);
Я ожидал бы, что они будут работать так же, но TryGetInstance
вернет ноль, а GetInstance
вернет правильный объект ОК, поэтому он определенно находится в реестре. Я могу использовать GetInstance
, но нужно обернуть его в try catch, что немного менее элегантно !!! Любые предложения, пожалуйста?