10

これらは同様の質問です:方法: Silverlight の文字列を使用して実行時に参照アセンブリから型をロードすると、参照アセンブリ内のクラスのGetType は失敗しますが、どちらの回答も機能しません。

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

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

最後に、参照先のアセンブリに GetType() を呼び出す関数を記述し、それを MvC プロジェクトで使用して、アセンブリ名を含めなくてもよいでしょうか? アセンブリ名を知っていることを削除したいので、参照されているアセンブリに Util IN を次のように記述できると考えました。

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

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

4

2 に答える 2

27

参照されているアセンブリがその時点で読み込まれていない可能性があります。また、あなたの質問から、完全なタイプ名ではなく、クラス名しかないことを理解しています。
次に、この行に沿って何かを試す必要があります。

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

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

于 2012-08-16T19:32:04.063 に答える
11

最初の質問では、次のようなことができます

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

2番目の質問の意味がわかりません。

于 2012-08-16T19:35:02.460 に答える