2008-09-16 3 views
0

일부 언어에서는 "new"키워드를 무시하여 유형의 인스턴스화 방법을 제어 할 수 있습니다. 이 작업은 .NET에서 직접 수행 할 수 없습니다. 그러나, "유형을 찾을 수 없습니다"예외를 처리하고 수동으로 유형을 확인하는 방법이 있는지 궁금 해서요..NET에서 형식을 확인하고 인스턴스화하는 방법을 변경할 수 있습니까?

XML 기반 파일을 읽고 그 안에 설명 된 유형을 인스턴스화하는 직렬기를 사용하고 있습니다. 나는 serializer에 대한 어떠한 통제도 가지고 있지 않지만, 나는 자신의 appdomain 호스트를 작성하지 않고 프로세스와 상호 작용하고 싶다.

대체 직렬화 방법을 제안하지 마십시오.

답변

5

이벤트 처리기를 AppDomain.CurrentDomain.AssemblyResolve에 연결하여 프로세스에 참여할 수 있습니다.

EventHandler는 ResolveEventArgs에서 전달 된 유형을 담당하는 어셈블리를 반환해야합니다.

당신은 당신이 무시할 수있는 AppDomain.TypeResolve 이벤트도있다 MSDN

+0

참고 :이 문제는 Mono에서 발생합니다. – leppie

-1

Reflection 및 Activator 클래스를 확인해야합니다. 문자열로 객체를 만들 수 있습니다. 부여 된 개체는 사용자가 액세스 할 수있는 어셈블리 중 하나에 있어야합니다.

1

에서 그것에 대해 자세한 내용을보실 수 있습니다.

1

select isn't broken에서는 다르게 보는 방법에 대해 설명합니다. 설계에 도구가 아닌 결함이있을 수 있습니다.

나는 "뭔가 새로운 것을"얻으려는 시도가 잘못된 접근이라고 생각합니다.

연산자 오버로딩을주의해서 사용해야하는 이유를 생각해보십시오. 언어 의미에 숨겨진 변경 사항이있을 때 디버깅하기가 쉽지 않으며 반 직관적입니다.

더 큰 컨텍스트에서 디자인을 한 번 살펴보고 문제를 해결하는보다 합리적인 방법을 찾으십시오.

+0

나는 deserialization이 폭발하기 전에 내가 필요한 타입을 얻기를 희망하면서 맹목적으로 찾은 모든 friggen 어셈블리를로드하고로드하는 것보다 프로세스를 돕는 것이 더 우아하다고 생각합니다. – Will

+0

나는 모든 어셈블리를 맹목적으로로드해야한다고 말하지는 않습니다. 그것은 그 문제의 증상입니다. 그 증상을 일으키지 않는 디자인을 찾으십시오. – Anthony

관련 문제