Cela devrait être simple, mais je ne trouve rien là-bas.
J'ai une classe dans un assemblée (une bibliothèque partagée - c'est un ensemble de classes de proxy pour un service Web) J'ai une classe dans un autre assemblage (projet Web) p>
Il y a une classe appelée "profil" qui est dans l'assembly proxy. Il existe un ensemble de classes qui "utilisent" un profil dans le projet Web. Lorsqu'il n'y a pas d'utilisateur connecté, un génériqueProfile est utilisé. P>
Suivre le principe de "séparation des préoccupations" .... L'assemblée proxy est utilisée par d'autres projets et concerne uniquement les trucs de service Web. Le projet Web a simplement des trucs Web là-bas P>
Cependant, il y a maintenant ce besoin de "GenericProfile" - pense à cela comme "utilisateur invité". P>
La chose logique à faire est de construire une interface appelée iProfile et de faire en tirer les deux classes. Mais cela créerait une dépendance circulaire entre les deux assemblages. P>
La meilleure idée est de créer une 3ème assemblée appelée myInterfaces et de mettre l'iprofile là-bas - mais cela provoque une violation de la séparation du principe des préoccupations À mon avis. À tout le moins, une instance de ce problème semble trop petite une raison de ressort pour faire un module supplémentaire dans ma solution. P>
Entrez la classe d'emballage - ou la classe d'emballage composite (tout ce que vous voulez appeler IT) P>
Je recherche quelque chose qui finit par générer quelque chose comme celui-ci ci-dessous. Y a-t-il une extension d'outil ou de studio visuelle qui le fera? Peut-être un fichier .tt? P>
3 Réponses :
Si j'étais confronté à votre problème d'origine, je mets iprofile code> dans votre bibliothèque partagée, à côté de la classe code> code>. Votre projet Web peut ensuite implémenter la classe genericprofile CODE> que nécessaire, rien d'autre n'a besoin de savoir à ce sujet, et d'autres clients de la bibliothèque peuvent faire la même chose que nécessaire. Il serait également utile de tester la bibliothèque. P>
Je ne comprends pas complètement ce que vous essayez d'accomplir, mais ci-dessous, c'est comment je générerais une classe d'emballage avec Restomer.
Personnellement si mon employeur ne veut pas payer pour Resharper, je l'achète. Cela me fait un meilleur développeur. Je suggère fortement que vous envisagez de l'acquérir comme un investissement dans votre carrière. Anti-non-responsabilité - Je ne suis pas du tout connecté avec ou parrainé par Resharper. P>
Ajoutez l'interface à la classe que vous souhaitez être la classe d'emballage p>
Visual Studio le fait hors de la boîte. Dans mon expérience, Resharper était excellent au début du siècle, mais la SP a rapidement rattrapé. L'installation de Resharper n'a que des effets secondaires négatifs maintenant. Je comprends que cela est très subjectif et je ne veux pas commencer une guerre. C'est juste mon expérience en tant que développeur de niveau très senior.
ThesoftwareJedi, s'il vous plaît partagez des instructions sur la façon dont vous alliez à ce sujet sans Restomer. Note latérale: J'aime le formatage de Resharper et la façon dont il donne des conseils sur la manière d'utiliser plus efficacement C #.
Si votre classe implémente une interface et possède un champ d'instance ou une propriété, les «actions rapides» incluront une option pour implémenter l'interface «via» votre champ. Voir la réponse que quelqu'un a déjà donné ci-dessous.
dans Visual Studio 2017
Créez votre classe P>
namespace WebProject
{
public interface IProfile
{...}
class MyWrapperClass : IProfile
{
private IProfile _wrapped;
}
}
Et il semble que quelqu'un a posé quelque chose de similaire à celui-ci ... Stackoverflow.com/questions/2150416/...
Je n'ai pas de restomé si ...
J'utiliserais T4 pour cela (comme vous le savez aussi bien) mais je ne sais pas s'il y a déjà un modèle complet existant pour cela. Mais je pense qu'un tel gabarit pourrait être écrit assez facilement en utilisant la réflexion.