Вкратце мой вопрос сводится к следующему:
Мне нужно реализовать настраиваемую привязку модели в MVC4, которая разрешает модели из локатора контейнера/сервиса, что угодно. Я реализовал следующий связыватель модели:
public class ServiceLocatorModelBinder : DefaultModelBinder
{
private readonly IServiceLocator _serviceLocator;
public ServiceLocatorModelBinder(IServiceLocator serviceLocator)
{
_serviceLocator = serviceLocator;
}
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var typeValue = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".ModelType");
var type = Type.GetType(
(string)typeValue.ConvertTo(typeof(string)),
true
);
var model = _serviceLocator.GetInstance(modelType);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type);
return model;
}
}
И теперь я хотел бы использовать это вместо DefaultModelBinder в mvc для разрешения всех моих моделей. Как мне это сделать?
Чтобы прояснить мою потребность в этом вообще (поскольку в целом считается лучшей практикой просто использовать конкретные простые классы для моделей/моделей представления), я экспериментирую с концепцией автоматического создания прокси вместо моей простой модели представления /poco в моем приложении, и поэтому у меня нет конкретного типа для привязки. Цель, которую я надеюсь достичь, состоит в том, чтобы взять шаблон сохранения моделей/моделей представлений простым и усилить его еще на один шаг, сделав невозможным добавление какой-либо логики к этим классам. Здесь мне нужен контейнер для разрешения типов моделей.