以前のバージョンのフレームワークもサポートする必要があるライブラリに.NET4.0インターフェイスIObserverを使用したいと思います。フレームワークのバージョンごとにビルドできる条件付きコンパイルがすでにあります。
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
標準のインターフェイスを使用して、.NET4.0ユーザーがまだ考えもしなかったクールな方法で統合できるようにしたいと思います。したがって、概念を複製して、他の今後の使用法との統合を失いたくありませんIObservable<T>
。
私が目にする危険は、ライブラリの.NET3.5ビルドが.NET4.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
何かご意見は?