2009-07-20 6 views
1

En essayant d'utiliser fxCop sur un projet C# comme base de normes de codage C#.Méthodes Overridable dans les constructeurs - Aide pour corriger

Le projet Im en utilisant est appelé S # arp Architecture et est disponible gratuitement ici: S#Arp Arch

Maintenant, si je lance FXCop (la plupart des choses ont été corrigés déjà) je dois corriger l'erreur FxCop de CA2214 pour les méthodes Overridable dans les contructeurs.

Au moment un morceau de violer le code ressemble à ceci:

public class Region : Entity, IHasAssignedId<int> 
{ 
    public Region(string description) 
    { 
     Check.Require(!string.IsNullOrEmpty(description)); 
     this.Description = description; 
    } 

    protected Region() 
    { 
    } 

    [DomainSignature] 
> public virtual string Description { get; protected set; } 

    public virtual void SetAssignedIdTo(int assignedId) 
    { 
     Id = assignedId; 
    } 
} 

La majeure partie est appelée de cette façon dans les autres fichiers cd:

public static RegionDto Create(Region region) 
{ 
    if (region == null) 
    { 
     return null; 
    } 

    return new RegionDto() 
    { 
     Id = region.Id, 
    > Description = region.Description 
    }; 
} 

J'ai essayé de changer le type de la méthode (privée/protégée etc) mais il y a souvent des besoins contradictoires par fxcop et les tests unitaires, fxcop disant qu'elle n'aime pas les contructeurs avec des méthodes virtuelles mais l'unité disant que les méthodes devraient être publiques/protégées virtuelles ou protégées un p'tit peu?

Donc toute aide pour résoudre cette règle fxcop serait appréciée, merci.

(L'erreur se produit sur la ligne marquée avec une>, la méthode set get virtuel et quand changé l'autre> est l'endroit où il se plaint)

+0

Quelle ligne a l'erreur? –

Répondre

3

C'est facile: « ne pas que ». À la place:

private string _description; 
public Region(string description) 
{ 
    Check.Require(!string.IsNullOrEmpty(description)); 
    _description = description; 
} 

protected Region() 
{ 
} 

[DomainSignature] 
public virtual string Description { 
    get {return _description;} 
    set {_description = value;} 
} 
+0

Enfin, une solution soignée plutôt que des gens qui parlent de design. C'est évident quand on y pense. Thx John –

Questions connexes