Ситуация:
Assembly 1
________________________ ________________________
| Class A | | Class B |
|-----------------------| |-----------------------|
| Method someMethod |---------->| Method otherMethod |
| | | |
|_______________________| |_______________________|
Сборка 1 - это приложение, которое могут использовать другие разработчики.Мы дадим им только .dll, чтобы мы могли публиковать обновления из приложения, если мы не изменим API.Разработчики не могут изменить каркас в сборке 1
Методы являются виртуальными, поэтому разработчики могут при необходимости переопределять методы для реализации собственной логики.
Проблема заключается в том, что разработчик не может переопределить otherMethodиз класса B он может переопределить его, но класс A всегда будет вызывать метод из класса B, а не переопределенный метод.
Assembly 1
________________________ ________________________
| Class A | | Class B |
|-----------------------| |-----------------------|
| Method someMethod |----XX---->| Method otherMethod |
| | | |
|_______________________| |_______________________|
\ |
\ |
\ |
Assembly 2 \ |
\ ________________|_______
\ | Class ExtendedB |
\ |-----------------------|
\____________>| Method otherMethod |
| |
|_______________________|
Сборка 2 имеет ссылку на сборку 1
Частичный классне работает, потому что это должна быть та же сборка и не будет работать в течение 2
Существуют ли шаблоны проектирования для этой проблемы?Или есть другое решение с отражением или что-то?
РЕДАКТИРОВАТЬ Добавлен пример кода:
/* ASSEMBLY 1 */
namespace Assembly1
{
public interface IAService
{
void TestMethod3();
void TestMethod4();
}
public interface IBService
{
void TestMethod1();
void TestMethod2();
}
public class AService : IAService
{
// Base implementation of AService
public virtual void TestMethod3()
{
//do something
}
public virtual void TestMethod4()
{
//do something
}
}
public class BService : IBService
{
// Base implementation of BService
public virtual void TestMethod1()
{
//do something
}
public virtual void TestMethod2()
{
//need to call AService implementation from assembly 2
}
}
}
/* ASSEMBLY 2 */
namespace Assembly2
{
public class NewAService : AService
{
public override void TestMethod3()
{
//default implementation which could be overridden
base.TestMethod3();
}
public override void TestMethod4()
{
//default implementation which could be overridden
//An implementation of IBService Should be called
base.TestMethod4();
}
}
}