2012-02-22 3 views
0

Reflection을 사용하여 개체를 가져 오려고 시도하고 해당 개체에서 메서드를 실행하려고합니다. Type.GetType("my.namespace.item")에서 null이 발생하여 테스트를 해보겠다고 결심했습니다. 이 코드를 사용하면 Type.GetType((new my.namespace.item()).GetType().FullName) 나는 여전히 null이됩니다.Activator.CreateInstance와 함께 GetType을 사용할 수 없습니다.

내가 이해하는 것으로부터 발생해서는 안됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

작업중인 기능을 표시하고 예외가 발생하는 줄을 표시 할 수 있습니까 (NullReferenceException?)? – Jay

+0

@ 제이 : 특별히 Type.GetType()에서 NullReferenceException을 얻고 있습니다. 이것이 내가 포함 된 유일한 코드 인 이유입니다. –

답변

1

Type으로 지정되어 있습니다. (역설적으로) 필요한 전체 이름이 아닙니다. Type.GetType(string) 작업을 위해 TypeAssemblyQualifiedName이 필요합니다

Type.GetType((new my.namespace.item()).GetType().AssemblyQualifiedName) 

잘해야한다. 그것은 수동과 같을 것이다 지정 :가 적용되지 않는 경우

Type.GetType("Namespace.TypeName, MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"); 

것은 분명히 당신은 버전, 문화, 또는 PublicKeyToken을 생략 할 수 있습니다.

+0

형식이없는 경우 어떻게 AssemblyQualifiedName을 가져올 수 있습니까? Type이 데이터베이스에 저장되어 있으므로 특별히 new my.namespace.item()이 필요하다는 것을 알 수 없습니다. 또한 버전, Culure 및 PublicKeyToken은 변경 될 수 있으므로 저장할 수 없습니다. –

+0

Assembly.GetTypes()를 사용하고 db의 이름과 일치시킵니다. 여러 어셈블리가있는 경우 어셈블리 이름도 db에 추가하십시오. 또는 사용자 정의 속성을 만들고 노출하려는 유형을 꾸미십시오. 여기서 customer 속성은 db에서 사용되는 이름 인 특성을가집니다. –

+0

방금 ​​데이터베이스 필드를 "my.namespace.thing"에서 "my.namespace.thing, my.namespace"로 변경했습니다. 이 작동합니다. –

관련 문제