À l'aide de ModelBinder attribut vs ModelBinders.Ajouter()
Quelqu'un peut me dire les avantages/concs à l'aide de [ModelBinder()]
attribut contre l'enregistrement de classeurs de modèle via ModelBinders.Add()
mondiale.asax?
Un avantage, je pense que c'est plus explicite, alors que l'inscription dans le mondial ModelBinders
n'est pas comme abvious à quelqu'un inspecter la méthode d'action.
Un compromis, je pense qu'il n'est pas réutilisable, puisque vous avez pour ajouter cet attribut à toutes les méthodes d'action qui ont besoin d'utiliser ce modèle de classeur, alors que l'inscription dans le mondial ModelBinders
rendra disponible pour toutes les méthodes d'action de recevoir ce modèle.
Est-ce la seule différence?
En d'autres termes, en indiquant ce correct:
- Si vous utilisez uniquement le modèle d'une méthode d'action (peut-être deux, get + post), puis utilisez
[ModelBinder()]
. - Si vous utilisez le modèle en plus d'une méthode d'action, puis de l'enregistrer dans le global
ModelBinders
.
Vous devez vous connecter pour publier un commentaire.
Le résultat de ces techniques sera le même donc c'est surtout une question de ce que l'équipe se sent plus à l'aise avec. Donc, vous pourriez en venir à une convention comme celle que vous avez indiqué.
Personnellement, je préfère ne pas avoir à mettre de l'attribut sur chaque méthode d'action qui utilise ce modèle. Je voudrais donc choisir l'une des options suivantes:
Définir l'attribut de la classe du modèle comme:
À l'échelle mondiale enregistrer le classeur
Une autre raison pourquoi je préfère l'un de ceux est parce que si jamais vous avez pour déclencher manuellement le modèle de processus de liaison, vous pouvez également voulez que votre modèle de liaison personnalisé à être utilisé:
Vous avez également la possibilité de mettre en œuvre votre propre logique de sélection de modèle de liants par la mise en œuvre de l'interface
IModelBinderProvider
et de l'inscription dans le monde.asax comme dansUn moyen de l'utilisation de l'attribut dans les paramètres de la méthode pourrait être primordial pour cette méthode, le modèle de classeur qui autrement seraient utilisés. Vous pourriez donc globalement enregistrer un modèle de classeur pour votre classe et de le remplacer dans une méthode d'action à l'aide de l'attribut.
À la fin, il ya quelques options pour la sélection du modèle de classeur.
En asp net MVC 3 cela sera résolu de la façon suivante (en supposant que vous utilisez la valeur par défaut ControllerActionInvoker)
L'attribut du paramètre de l'action. Voir GetParameterValue méthode de la ControllerActionInvoker classe
Le Liant retourné à partir de la IModelBinderProvider. Voir GetBinder méthode dans le ModelBinderDictionary classe
Le Classeur enregistré globalement dans le ModelBinders.Liants dictionnaire.
Le Liant définis dans le
[ModelBinder()]
attribut pour le type de modèle.La DefaultModelBinder.
ModelBinders.Binders.DefaultBinder = new TestBinder();
Il me semble que l'avantage de l'utilisation d'un attribut plutôt que d'ajouter le modèle de classeurs collection Mondiale.asax est que vous pouvez dire à la méthode (ou une classe) qui spécifique liant à l'utilisation, plutôt que d'associer le liant à un type spécifique. Ensuite, vous pouvez créer un modèle qui s'appuie sur un contexte plutôt qu'un type.