Questo dovrebbe essere semplice, ma non riesco a trovare nulla là fuori.Genera automaticamente una classe wrapper in C# utilizzando Composizione
Ho una classe in un unico assembly (una libreria condivisa - è un insieme di classi proxy per un servizio Web) Ho una classe in un altro assembly (progetto web)
c'è una classe denominata " Profilo "che si trova nell'assembly Proxy. Esiste un insieme di classi che "usano" un profilo nel progetto web. Quando non ci sono utenti loggati, viene utilizzato un GenericProfile.
Seguendo il principio di "separazione delle preoccupazioni" .... L'assembly Proxy viene utilizzato da altri progetti e riguarda solo i servizi Web. Il progetto web contiene solo elementi web
Tuttavia, ora c'è questa necessità di un "GenericProfile" - pensarlo come "Utente ospite".
La cosa logica da fare è creare un'interfaccia chiamata IProfile e far sì che entrambe le classi ne derivino. Ma ciò creerebbe una dipendenza circolare tra i due assiemi.
L'idea migliore è quella di creare un terzo assembly chiamato MyInterfaces e inserire l'IProfile lì, ma ciò causa una violazione del principio Separation of Concerns a mio parere. Per lo meno, un'istanza di questo problema sembra una ragione troppo piccola per scaturire dalla creazione di un modulo aggiuntivo nella mia soluzione.
Inserire la classe wrapper - o la classe wrapper Composite (qualunque cosa si voglia chiamare)
Sto cercando qualcosa che finisce per generare qualcosa di simile qui di seguito. C'è uno strumento o un'estensione di Visual Studio che lo farà? Forse un file .tt?
namespace WebProject
{
public interface IProfile
{...}
class MyWrapperClass : IProfile
{
Proxy.Profile _profile;
public MyWrapperClass(Proxy.Profile proxy)
{
_profile = proxy;
}
public string IProfile.Property1{ get { return _profile.Property1; } set { _profile.Property1 = value; } }
public string IProfile.Property2{ get { return _profile.Property2; } set { _profile.Property2 = value; } }
public string IProfile.Property3{ get { return _profile.Property3; } set { _profile.Property3 = value; } }
}
}
E sembra che qualcuno abbia chiesto qualcosa di simile a questo ... http://stackoverflow.com/ques tions/2150416/generazione-pass-through-code-when-preferring-composition-over-inheritance – 010110110101
Non ho ReSharper però ... – 010110110101
Vorrei usare T4 per questo (proprio come pensavi anche tu) ma io non so se esiste già un modello completo esistente per questo. Ma penso che un tale modello possa essere scritto abbastanza facilmente usando la riflessione. –