2014-07-24 5 views
0

InternalsVisibleTo 특성의 존재를 알고 있습니다.이 클래스는 모든 내부 클래스를 외부 어셈블리에서 볼 수있게합니다. 내 경우하나의 내부 클래스 만 다른 어셈블리에서 볼 수 있도록 표시하십시오.

나는 모든 클래스는 하나의 특정 조립에 볼 수 있어야합니다 유틸리티 프로젝트가 있습니다. 외부 프로젝트가 아닌 솔루션의 다른 모든 어셈블리에서 볼 수있는 Extension 메서드가 포함 된 하나의 클래스를 제외한 모든 클래스.

이 결과를 얻는 가장 좋은 방법은 무엇입니까?

답변

0

이 작업을 수행 할 수있는 IDE를 사용하는 경우이를 달성하는 한 가지 방법은 파일을 클래스와 확장 메서드로 공유하는 것입니다. 이렇게하면 내부 클래스로 표시하고 다른 모든 클래스는 public으로 표시하면 확장 메서드에 액세스 할 수 있지만 공개되지는 않습니다. 또한 확장 메서드 클래스를 편집하면이 메서드가 솔루션의 모든 어셈블리에 반영됩니다.

enter image description here

: 링크로 추가

enter image description here

그리고 파일을 찾아 선택> 기존 항목 추가 - 비주얼 스튜디오에서이를 달성하는 방법은 프로젝트를 오른쪽 클릭하고 추가를 선택하는 것입니다

친구 어셈블리는 주로 디버깅 및 테스트 목적으로 사용해야합니다. 기능으로 사용하는 것은 코드 냄새입니다.

+0

정말요? 코드 냄새? 어쩌면 내가 친구 모임의 목적을 오해했을 수도 있습니다. 내가 원한 것은 솔루션의 다른 어셈블리에만 내 코드를 공유하는 것입니다. 다른 프로젝트의 다른 누군가를 차단하여 코드를 잡고 작업에 사용하고 싶습니다. – simoneL

+0

@simoneL 코드 냄새가 나는 이유는 이미 가시성을위한 몇 가지 구조가 있다는 것입니다. 일부 서비스를 제공해야하는 경우 공개해야합니다. 그렇지 않다면 내부적이어야합니다. – SKleanthous

+0

@simoneL 제공된 서비스에 대한 액세스를 제한해야하는 경우 인터페이스가 공개되고 일부가 내부적이며 클래스가 내부 클래스 인 경우 클래스가이 인터페이스를 구현하게하십시오. 해당 클래스의 참조가 외부 어셈블리에서 필요하면 팩토리를 강제로 작성하고 인터페이스 중 하나로 리턴하십시오. – SKleanthous

0

위로 나눕니다. 공용 클래스를 자체 어셈블리에 배치하십시오.

특정 클래스를 "내부에서 볼 수있는"것으로 지정할 방법이 없습니다.

+0

아마 제 질문에 명확하지 않았습니다. Utils 프로젝트의 수업은 공개가 아니며 모두 내부 용입니다. 차이점은 모두 솔루션의 다른 어셈블리에서 사용해야하지만 Extensions 클래스는 나머지 어셈블리에서는 사용할 수 있지만 외부 어셈블리에서는 사용할 수 없어야한다는 것입니다. – simoneL

+0

답을 다시 말하고 "public"을 "common"으로 바꿀 것입니다. 대답의 나머지 부분은 동일하게 유지됩니다 ... –

관련 문제