클래스 라이브러리에 플러그인 아키텍처를 노출 한 상황에서 다른 사람들이 내가 만든 인터페이스를 구현할 수있게하고 싶습니다. 클래스에 의해 커스텀 구현이 사용되도록 (듯이)합니다.플러그인 아키텍처가있는 경우 API 반환 값에 대한 읽기 전용 액세스 보장
저는이를 수행하기 위해 의존성 주입 (구체적으로 생성자 주입)을 사용하고 있습니다.
이 내가이 개 충돌하는 목표와 응용 프로그램을 설계 할 시도한 사실을 제외하고 잘 작동 : 반환 값을 수정할 수 없습니다해야 API의
- 소비자; 내가 다른 어셈블리에서, 그것을
- 플러그인을 수정할 수있는 소비자 없도록하기 위해 세터에
internal
등을 사용하여 사용자 지정 읽기 전용 컬렉션과 객체를 생성 한, 는이 내부 메서드와 속성
internal
플러그인 어셈블리 (
InternalsVisibleTo
또는 유사한 통해) 액세스,하지만
을 부여하는 (그 문제에 대한 또는 C#을) 내 API에 대한 방법이 없기 때문에 이 두 가지 목표는 상충된다.
대표적인 예
한다고 가정 우리는 세 가지 어셈블리를 가지고있다. 내 수업 (Class
), 플러그인 어셈블리 (Plugin
) 및 소비자 어셈블리 (Consumer
).
인터페이스, IReturnValue
은 API의 반환 값 (Class
어셈블리의 일부 메서드 또는 클래스)을 지정합니다. 문제는 다음과 같습니다. 의 주어진 인스턴스에서 읽기 전용 (internal
) 속성과 인덱서를 설정할 수 있도록하려면 Plugin
을 입력해야하지만이 작업을 수행하려면 Consumer
코드가 필요하지 않습니다.
플러그인 시스템이 작동 중이므로 InternalsVisibleTo
에 어떤 어셈블리를 허용할지 미리 알 수 없습니다.
이러한 상황에서 은 반환 유형을 수정하는 소비자에 대해 정말로 신경 써야합니까? 그들이하는 것이 자신의 잘못 인 것 같습니다. 그리고 나는이 문제를 해결하기위한 적절한 해결책을 생각할 수 없다.
문제를 설명하는 샘플 코드가 대단히 도움이 될 것이라고 생각합니다. 나는 내가 이해하고 있는지 확신하지 못한다. –
이제 막 작업 중이 었습니다. 나도 알아, 나 혼란 두 :/ –