1

简而言之,我的问题归结为:

我需要在 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 整个应用程序中的类,因此我没有要绑定的具体类型。我希望实现的目标是采用保持模型/视图模型简单的模式,并通过使任何人都无法向这些类添加任何逻辑来进一步执行它。这是我需要一个容器来解析模型类型的地方。

4

1 回答 1

3

我该怎么做呢?

您可以将默认模型绑定器替换为您的自定义模型绑定器Application_Start

IServiceLocator sl = ...
ModelBinders.Binders.DefaultBinder = new ServiceLocatorModelBinder(sl);
于 2012-08-19T12:58:01.023 回答