public void Execute() { if (!SkipRegisterExtendedTypesRegistry && !(dependencyResolver.IsRegistered(typeof(IExtendedTypesRegistry)))) { dependencyResolver.RegisterSingleton <IExtendedTypesRegistry, ExtendedTypesRegistry>(); } if (!SkipRegisterModelMetadataProvider && !(dependencyResolver.IsRegistered(typeof(ModelMetadataProvider)))) { dependencyResolver.RegisterSingleton <ModelMetadataProvider, ExtraModelMetadataProvider>(); } }
protected virtual void SetEntityModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var modelType = bindingContext.ModelType; if (typeof(IBaseEntity).IsAssignableFrom(modelType) && !(bindingContext.Model is IBaseEntity)) //already set? { //if we somehow already have the entity in the routedata (eg. Html.Action) var rawValue = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (rawValue != null && rawValue is IBaseEntity) { return; } var modelName = (bindingContext.ModelName == "entity") ? null : bindingContext.ModelName; var valueName = CreateSubPropertyName(modelName, "Id"); ValueProviderResult value = bindingContext.ValueProvider.GetValue(valueName); if (value != null) { var toProp = modelType.GetProperty("Id"); object pkValue = value.ConvertTo(toProp.PropertyType); if (pkValue != null) { //we have a primary key value, let's get the service var serviceType = typeof(IModelService <>).MakeGenericType(modelType); if (dependencyResolver.IsRegistered(serviceType)) { var service = dependencyResolver.Resolve(serviceType) as IModelService; if (service != null) { bindingContext.ModelMetadata.Model = service.Get(pkValue); } } } } } }