이전 버전의 프레임 워크를 지원해야하는 라이브러리에 .NET 4.0 인터페이스 인 IObserver를 사용하고 싶습니다. 이미 프레임 워크 버전마다 빌드 할 수있는 조건부 컴파일이 있습니다.System.IObserver 용 .NET 3.5 스탠드
Rx 확장 프로그램의 버전을 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 4.0에서 .NET 3.5 빌드가 .NET 4.0에서 사용되면 유형 충돌이 발생할 수 있다는 것입니다. 이상적으로는 v4.0을 사용하는 사람이 4.0 빌드를 사용합니다.
이 접근법에 대해 알아야 할 다른 사항이 있습니까?
#if !NET40
namespace Foo
{
public interface IObserverProxy<in T>
{
void OnCompleted();
void OnError(Exception error);
void OnNext(T value);
}
}
#endif
:
2) 또는, 나는 내가 기울고 있어요)이 나쁜 생각하는 이유에 대한 사람들의 생각을 알고 싶습니다 방향 인 (대신 내 코드에서이 일을 생각했습니다
그리고 나중에 내가 그것을 사용하고자하는 경우 :
#if NET40
using IObserverBar=System.IObserver<Bar>;
#else
using IObserverBar=Foo.IObserverProxy<Bar>;
#endif
어떤 생각이?
이들은 좋은 점입니다. 확실히 System' 네임 스페이스에 넣지는 않을 것이지만 만약 내가했다면 무엇이 망가질 지 궁금하다. 내 라이브러리의 핵심 개념이 아니기 때문에 외부 DLL을 포함시키지 않는 편이 좋을 지 모르지만, 필자가 그 측면을 고립 시켰음을 알면 좋다. 감사! – mckamey