C# 在MVC中实现自定义模型绑定器以解析容器中的类型

C# 在MVC中实现自定义模型绑定器以解析容器中的类型,c#,asp.net-mvc,asp.net-mvc-4,model-binding,proxy-classes,C#,Asp.net Mvc,Asp.net Mvc 4,Model Binding,Proxy Classes,简言之,我的问题归结为: 我需要在MVC4中实现一个自定义模型绑定器,该绑定器解析来自容器/服务定位器的模型。我已经实现了以下模型绑定器: public class ServiceLocatorModelBinder : DefaultModelBinder { private readonly IServiceLocator _serviceLocator; public ServiceLocatorModelBinder(IServiceLocator serviceLoc

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

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

我该怎么做

您可以在
应用程序\u Start
中用自定义活页夹替换默认模型活页夹:

IServiceLocator sl = ...
ModelBinders.Binders.DefaultBinder = new ServiceLocatorModelBinder(sl);

啊,谢谢,这就是我一直在寻找的,我会尝试一下,然后标记这个答案,如果它有效的话。感谢您的快速回复:)