简而言之,我的问题归结为:
我需要在 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;
}
}
现在我想用它代替 mvc 中的 DefaultModelBinder 来解析我的所有模型。我该怎么做呢?
为了澄清我这样做的需要(通常认为最好的做法是只为视图模型/模型使用具体的简单类),是我正在尝试自动生成代理来代替我的简单视图模型的概念/poco 整个应用程序中的类,因此我没有要绑定的具体类型。我希望实现的目标是采用保持模型/视图模型简单的模式,并通过使任何人都无法向这些类添加任何逻辑来进一步执行它。这是我需要一个容器来解析模型类型的地方。