Это должно быть просто, но я ничего не могу найти там.
У меня есть класс в одной сборке (разделяемая библиотека - это набор прокси-классов для веб-службы)
У меня есть класс в другой сборке (веб-проект)
Существует класс с именем "Профиль", который находится в сборке Proxy.
Существует набор классов, которые «используют» профиль в веб-проекте.
Когда пользователь не вошел в систему, используется GenericProfile.
Следуя принципу "разделения интересов" ....
Сборка Proxy используется другими проектами и касается только содержимого веб-службы.
В веб-проекте просто есть веб-материалы
Однако теперь существует потребность в «GenericProfile» - думайте о нем как «Гость».
Логическая вещь, которую нужно сделать - это создать интерфейс под названием IProfile и заставить оба класса наследовать его. Но это создаст круговую зависимость между двумя сборками.
Следующая лучшая идея - создать третью сборку под названием MyInterfaces и поместить туда IProfile - но это, на мой взгляд, нарушает принцип разделения проблем. По крайней мере, один экземпляр этой проблемы кажется слишком малой причиной для создания дополнительного модуля в моем решении.
Введите класс оболочки - или класс оболочки Composite (как хотите, чтобы он назывался)
Я ищу что-то, что в итоге генерирует что-то вроде этого ниже. Есть ли инструмент или расширение Visual Studio, которое сделает это? Может быть, файл .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; } }
}
}