У меня есть 3 (не считая классов обслуживания) классов C # и их конструкторы, которые написаны таким образом, чтобы использовать Внедрение зависимостей (я использую Microsoft Unity DI framework) следующим образом :
public class BaseClass
{
public ServiceClass1 Sc1 {get;set;}
public ServiceClass2 Sc2 {get; set;}
public BaseClass(
ServiceClass1 sc1,
ServiceClass2 sc2
)
{
Sc1 = sc1;
Sc2 = sc2;
// assign C# Session value to property UserEmail for all Service classes that are passed in the Base class contructor
SC1.UserEmail = (string) Session["UserEmail"];
SC2.UserEmail = (string) Session["UserEmail"];
}
}
public class DerivedClass1: BaseClass
{
public DerivedClass1 (
ServiceClass1 sc1,
ServiceClass2 sc2
): base(sc1, sc2)
{
}
}
public class DerivedClass2: BaseClass
{
public DerivedClass2 (
ServiceClass1 sc1,
ServiceClass2 sc2
): base(sc1, sc2)
{
}
}
Проблема заключается в том, что всякий раз, когда используется новый класс Service, его необходимо добавить в список параметров конструктора базового класса, а список параметров конструктора производных классов необходимо обновить, чтобы свойство UserName новый класс обслуживания назначается как другие предыдущие классы обслуживания. Также к базовому классу должно быть добавлено новое типизированное свойство класса Service (я знаю, что не могу избежать добавления такого нового свойства класса Service к базовому классу). Я должен переписать конструкторы классов Base и Re следующим образом
public class BaseClass
{
public ServiceClass1 Sc1 {get;set;}
public ServiceClass2 Sc2 {get; set;}
public ServiceClass3 Sc3 {get; set;} // added property
public BaseClass(
ServiceClass1 sc1,
ServiceClass2 sc2,
ServiceClass3 sc3 // added constructor parameter
)
{
Sc1 = sc1;
Sc2 = sc2;
Sc3 = sc3; // added code line
// assign C# Session value to property UserEmail for all Service classes that are passed in the Base class contructor
SC1.UserEmail = (string) Session["UserEmail"];
SC2.UserEmail = (string) Session["UserEmail"];
Sc3.UserEmail = (string) Session["UserEmail"]; // added code line
}
}
public class DerivedClass1: BaseClass
{
public DerivedClass1 (
ServiceClass1 sc1,
ServiceClass2 sc2,
ServiceClass3 sc3 // added parameter
): base(sc1, sc2, sc3) // re-write passing arguments
{
}
}
public class DerivedClass2: BaseClass
{
public DerivedClass2 (
ServiceClass1 sc1,
ServiceClass2 sc2,
ServiceClass3 sc3 // added parameter
): base(sc1, sc2, sc3) // re-write passing arguments
{
}
}
Мой вопрос: как можно избежать модификации конструкторов производных классов, когда в конструктор базового класса добавляется новый класс Service?