2012-08-16 20 views
9

これらは同様の質問です:How-to: Load a type from a referenced assembly at runtime using a string in SilverlightGetType on a class in a referenced assembly failsどちらの回答も機能しません。文字列としてクラス名を指定して参照アセンブリ内の型を取得しますか?

プレーンタイプを文字列として含むデータベースからデータを取得するMVCプロジェクトがあります。これらの型は参照されたアセンブリにあり、MVCプロジェクトではありません。

したがって、たとえばのは、私の参照アセンブリ名がMyFrameworkとプレーンタイプ名Carで、完全なタイプ名がMyFramework.Cars.CarまたはMyFramework.Vehicles.Cars.Carまたは他のいくつかのバリエーション可能性がありましょう。私が持っているのは、参照されたアセンブリ名とプレーンなクラス名です。完全な型名に関係なく、どのように型を取得できますか?

最後に、GetType()を呼び出してMvCプロジェクトで使用してアセンブリ名を含めることができるように、参照アセンブリに関数を書き込むことはできますか?私はので、私は私のように参照アセンブリ内の使用率を記述することができると思ったアセンブリ名を知って削除する:

namespace MyFramework //the referenced assembly 
{ 
    public static class TypeUtil 
    { 
    public static Type GetFrameworkType(string typeName) 
    { 
     return Type.GetType(typeName); 
    } 
    } 
} 

そして、私のMVCプロジェクトで、私は文字列名としてアセンブリを必要とせずに、それを呼び出すことができます。それは可能ですか、私はいつもアセンブリ名が必要でしょうか?

+0

他の回答はなぜ機能しませんでしたか? –

+0

@RobertHarvey私は単純なクラス名を持っているからです。完全な型名ではありません。これらの答えは、フルタイプを知ることに依存しています。 – SventoryMang

答えて

19

参照されているアセンブリがその時点でロードされていない可能性があります。また、私はあなたの質問から、完全な型名、クラス名だけを持っていないことを理解しています。
あなたは、この線に沿って何かを試してみてください:

Type type = Assembly.Load("YourAssemblyName").GetTypes().First(t => t.Name == "ShortTypeName"); 

は私が正しくあなたを理解願っています。

+0

私はそのアセンブリにUtilを書きますが、まだクラス名しか持っていない場合、どのように見えますか? 'GetTypeFromFramework(string typeName)'関数を持つことができる 'TypeUtil'クラスを書くことによって、アセンブリ名の必要性を取り除きたいと思います。そのアセンブリで 'GetType'を呼び出すと、アセンブリをまったく使う必要はありませんが、それでもnullを返します。 – SventoryMang

+0

あなたの状況をよりよく理解できるように、何をしようとしているのかのサンプルを投稿してください。 –

+0

質問を編集しました。あなたの答えは私のUtilで使用するときに機能します。私は文字列としてアセンブリ名への依存関係を取り除くことができるのか不思議です。私は、そのアセンブリでGetType()を呼び出すと、アセンブリ名を指定する必要はなく、単純に 'Type.GetType(クラス名)'を指定するだけでnullが返されたという印象を受けました。参照アセンブリ。 – SventoryMang

9

最初の質問については、私はあなたが2番目の質問で何を意味するかわからない

Type t = AppDomain.CurrentDomain.GetAssemblies() 
           .Where(a => a.FullName == "MyFramework") 
           .SelectMany(a => a.GetTypes()) 
           .Where(t => t.Name == "Car") 
           .FirstOrDefault(); 

ような何かを行うことができます。

関連する問題