Esto debería ser simple, pero no puedo encontrar nada por ahí.Generación automática de una clase Wrapper en C# usando Composición
tengo una clase en una asamblea (una biblioteca compartida - es un conjunto de clases de proxy para un servicio Web) que tienen una clase de otro montaje (proyecto web)
hay una clase llamada " Perfil "que está en el conjunto de Proxy. Hay un conjunto de clases que "usan" un Perfil en el proyecto web. Cuando no hay ningún usuario conectado, se usa un GenericProfile.
Siguiendo el principio de "separación de preocupaciones" .... El ensamblaje Proxy lo utilizan otros proyectos y solo se ocupa del servicio web. El proyecto web solo tiene elementos web allí
Sin embargo, ahora existe la necesidad de un "Perfil genérico", piénselo como "Usuario invitado".
Lo lógico es crear una interfaz llamada IProfile y hacer que ambas clases se deriven de ella. Pero eso crearía una dependencia circular entre los dos ensamblajes.
La siguiente mejor idea es crear una tercera asamblea llamada MyInterfaces y poner el IProfile allí, pero eso causa una violación del principio de separación de preocupaciones en mi opinión. Por lo menos, una instancia de este problema parece una razón demasiado pequeña para hacer un módulo extra en mi solución.
Introduzca la clase contenedora - o la clase contenedora Compuesto (lo que quieras llamarlo)
Busco algo que acaba por generar algo como esto más adelante. ¿Hay alguna herramienta o extensión de Visual Studio que lo haga? Tal vez un archivo .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; } }
}
}
Y parece que alguien le preguntó algo similar a esto ... http://stackoverflow.com/ques ciones/2150416/generate-pass-through-code-when-preferring-composition-over-inheritance – 010110110101
No tengo ReSharper aunque ... – 010110110101
Usaría T4 para esto (como pensaste también) pero no sé si ya existe una plantilla completa para esto. Pero creo que una plantilla así podría escribirse con bastante facilidad utilizando la reflexión. –