Я хочу использовать IObserver с интерфейсом .NET 4.0 для библиотеки, которая также должна поддерживать предыдущие версии платформы. У меня уже есть условная компиляция, которая позволяет мне строить для каждой версии фреймворка.
Я не хочу использовать версию Rx Extensions IObserver<T>
, поскольку это добавит ненужную зависимость к автономной сборке, в противном случае.
Я собираюсь добавить этот блок кода в мою библиотеку, и мой вопрос ко всем вам таков:
1) Я знаю, что это плохая идея, но я пытаюсь точно выяснить, "Почему?"
#if !NET40
namespace System
{
public interface IObserver<in T>
{
void OnCompleted();
void OnError(Exception error);
void OnNext(T value);
}
}
#endif
Я хочу использовать стандартный интерфейс, чтобы пользователи .NET 4.0 могли легко интегрироваться, о чем я даже не думал. Поэтому я не хочу просто продублировать концепцию и потерять интеграцию с другими и будущими IObservable<T>
использованиями.
Опасность, которую я вижу, заключается в том, что при сборке .NET 3.5 моей библиотеки в .NET 4.0 могут возникнуть коллизии типов. В идеале, однако, кто-то, использующий v4.0, мог бы использовать библиотеку 4.0 для сборки.
Есть ли еще какие-то вещи, о которых мне следует знать при таком подходе?
2) В качестве альтернативы , я решил вместо этого сделать это в своем коде (в этом направлении я склоняюсь) и хотел бы узнать мысли людей о том, почему это плохая идея:
#if !NET40
namespace Foo
{
public interface IObserverProxy<in T>
{
void OnCompleted();
void OnError(Exception error);
void OnNext(T value);
}
}
#endif
И позже, где я хочу его использовать:
#if NET40
using IObserverBar=System.IObserver<Bar>;
#else
using IObserverBar=Foo.IObserverProxy<Bar>;
#endif
Есть мысли?