Я знаю, что ODATA может вернуть json, но не уверен, должен ли я использовать атрибут или интерфейс, чтобы сделать это.
Я хочу, чтобы это делалось так же, как http://odata.netflix.com/Catalog/Titles ? $ format = JSON, но мой сервис odata не возвращает JSON , Когда я называю это как www.foo.com/service?$format=json, он просто возвращает XML. ________________________ ________________________ | Класс А | | Класс Б | | ----------------------- | | -----------------...
Ситуация:
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();
}
}
}