2012-02-22 9 views
0

Reflectionを使用してオブジェクトを取得しようとしていて、そのオブジェクトでメソッドを起動しようとしています。私はType.GetType("my.namespace.item")からヌルになっていたので、テストしなければならないことを決断しました。このコードを使用してType.GetType((new my.namespace.item()).GetType().FullName)私はまだnullを取得します。Activator.CreateInstanceでGetTypeを使用できないようです

私が理解しているところから起こるべきではありません。私は間違って何をしていますか?

+0

作業中の機能を表示し、例外が発生した行(NullReferenceException?)があればそれを表示できますか? – Jay

+0

@Jay:Type.GetType()でNullReferenceExceptionが特に発生しています。これが私が含まれている唯一のコードでした。 –

答えて

1

TypeFullNameは、(皮肉なことに)必要なフルネームではありません。 Type.GetType(string)が動作するためにはTypeAssemblyQualifiedNameが必要です。

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

は問題ないはずです。彼らは適用されない場合はもちろん、あなたがバージョン、文化、またはなPublicKeyTokenを省略することができ

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

:それを手動で指定すると、次のようになります。

+0

タイプがない場合は、どのようにAssemblyQualifiedNameを取得できますか? Typeはデータベースに格納されているため、特にnew my.namespace.item()が必要なことはわかりません。また、Version、Culure、PublicKeyTokenは変更される可能性があるため、保存することはできません。 –

+0

Assembly.GetTypes()を使用して、dbの名前を指定します。複数のアセンブリがある場合は、データベースにもアセンブリ名を追加します。または、カスタム属性を作成し、公開するタイプを装飾します。 customer属性には、dbで使用される名前であるプロパティがあります。 –

+0

データベースフィールドを "my.namespace.thing"から "my.namespace.thing、my.namespace"に変更しました。これは機能します。 –