2013-08-04 4 views
3

길게 나타날 수도 있지만 .NET의 유연성은 절대로 나를 놀라게하지 않으므로 여기로갑니다..NET 어셈블리 꾸미기

공통 기본 클래스에서 파생 된 클래스 유형에 대한 어셈블리 집합을 검색해야하는 MVC 응용 프로그램을 개발 중입니다.

즉 ActivityBase에서 파생 된 활동 유형을 가진 여러 어셈블리가 있습니다. 이러한 어셈블리는 특정 디렉터리에 배치됩니다. 그들은 마치 플러그인과 같습니다. 런타임에 동적으로로드해야하기 때문에 몇 가지 종속성도 필요합니다 (분리 할 수있는 편리한 방법을 알아 내지 못하면이 문제도 해결할 수 있습니다.)

이 디렉터리의 모든 .DLL 파일을 반복하고, 어셈블리를로드하고, 어셈블리의 모든 형식을 반복하여 ActivityBase에서 파생 된 형식을 찾는 코드가 있어야합니다.

잘 작동합니다. 그러나 일부 종속성에는 수천 가지 유형이 있고 성능 문제가 발생하기 때문에 활동이없는 어셈블리를로드하고 검색하는 것을 피하고 싶습니다.

그래서 내 질문에 파일 명명 규칙 이외의 다른 방법으로 "장식"또는 쉽게 자동화 할 수있는 작업 어셈블리임을 나타내는 데이터 형식의 일부 유형으로 표시하는 것입니다 빌드시 및 런타임시 쉽게 읽을 수 있습니까?

이 문제를 해결하기위한 다른 제안 사항도 환영합니다.

[AttributeUsage(AttributeTargets.Assembly)] 
public class ActivityAssemblyAttribute : Attribute 
{ 
} 

그런 다음이 속성에 필요한 어셈블리를 장식 :

+2

사용자 지정 어셈블리 특성은 무엇입니까? http://stackoverflow.com/ 질문/1936953/custom-assembly-attributes? – nemesv

+1

특성 솔루션에 대한 과도한 특성 자체를 사용하기 때문에 (어떤 식 으로든) [Microsoft 확장 프레임 워크] (http://msdn.microsoft.com/en-us/library/dd460648.aspx) - MEF를 사용하면 가져올 수 있습니다 특정 유형/구현의 어셈블리. – pasty

+0

그 반가웠다, 잘 모르겠지만 MEF는 아마도 전반적인 응용 프로그램 디자인에 도움이 될 수 있다고 들었으므로 나는 그것에 대해서도 살펴볼 것입니다. – Gerald

답변

6

당신은 당신의 자신의 어셈블리 특성을 구현할 수 있습니다 필요한

[assembly: ActivityAssemblyAttribute()] 

그리고, 단지 질문에서 조립이 장식되어 있는지 확인 특성 :

ActivityAssemblyAttribute attribute = null; 
object[] attributes = assembly.GetCustomAttributes(typeof(ActivityAssemblyAttribute), false); 
if (attributes.Length > 0) 
{ 
    attribute = attributes[0] as ActivityAssemblyAttribute; 
} 
+0

트릭을 수행하는 것처럼 보입니다. 고마워요. – Gerald