2010-01-22 1 views
3

Reflection.Emit을 사용하여 기존 어셈블리에 형식을 만들 수 있습니까? 아니면 동적 형식을 포함 할 수 있도록 새 동적 어셈블리를 정의해야합니까?C# Reflection : 기존 어셈블리에 클래스 내보내기

기본적으로 여러 클래스를 인스턴스화하고 다른 여러 XML 파일의 데이터로 채워진 클래스를 정의하는 XML 정의 파일을 읽으 려합니다. 여러 폴더 (각기 다른 정의 파일이 있음)에 대해 린스하고 반복합니다.

이 데이터를 사용하여 내 앱에 동적으로 인터페이스를 구축하고 데이터를 XML 파일에 다시 저장할 때 데이터의 형식을 정의 할 수도 있습니다.

+0

런타임시 XML 정의가 실제로 변경됩니까? 아마도 클래스 생성을 수행하기위한 사전 빌드 이벤트가 귀하의 상황에서 더 좋을까요? –

+0

앱은 정의 파일을로드하고 정의에서 클래스를 생성 한 다음 다른 정의 파일을로드하고 프로세스를 반복해야합니다 ... 앱이로드 될 때마다 정의 파일이 다를 수 있습니다. – EvoGamer

답변

4

Reflection.Emit을 사용할 때는 항상 새 어셈블리를 만들어야합니다.

그러나 기존의 어셈블리를 가져 와서 인터페이스로 정의하는 것이 좋습니다. Reflection.Emit을 사용하여 런타임에 새 어셈블리를 만들고 인터페이스를 구현하는 유형을 정의 할 수 있습니다. 어셈블리는 factory pattern을 사용하여 속성을 동적으로 생성 된 유형을 인스턴스화하고 (컴파일 타임에 알려진) 인터페이스의 구현을 반환 할 수 있습니다.

+0

이것이 내가 필요한 대답이라고 생각하지만 프로그래밍 방식의 레고 블록의 형태로 인터페이스를 사용한다는 것은 기본적으로 제안하고 있습니까? 프로젝트의이 부분에서 인터페이스를 사용한다고 생각할 수있는 유일한 다른 방법은 그것들이 역동적이어야한다는 것입니다. – EvoGamer

+0

네, 그게 기본적인 아이디어였습니다. 인터페이스를 사용하여 계약을 정의하고 다이나믹 생성을 사용하여 인터페이스를 통해 프로그램을 "접착"해야합니다. –

1

Reflection.Emit을 사용하여 새 어셈블리를 정의합니다.