2017-01-23 15 views
1

特定の属性を持っているかどうかを調べるためにstringからクラスインスタンスが必要です。 私はこの.NetCoreでクラスのインスタンスを動的に取得

Type type = Assembly.GetEntryAssembly().GetType("ClassName"); 
object entity = Activator.CreateInstance(type); 
var tableAttribute = entity.GetType().GetTypeInfo().GetCustomAttribute<TableAttribute>(); 

のようにそれを試してみましたが、型がnullの場合? TestConsoleAppで

全体コード:

using System; 
using System.ComponentModel; 
using System.Reflection; 

namespace AssemblyTest 
{ 
    [Description("TestDescription")] 
    public class TestClass { } 
    // 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Type type = Assembly.GetEntryAssembly().GetType("TestClass"); 

      if(type == null) 
       Console.WriteLine("Object type is NULL."); 
      else 
       Console.WriteLine("Object type has value."); 

      object entity = Activator.CreateInstance(type); 

      var tableAttribute = entity.GetType().GetTypeInfo().GetCustomAttribute<DescriptionAttribute>(); 
     } 
    } 
} 

enter image description here

+0

タイプが現在のアセンブリにあり、別のアセンブリではありませんか? –

+0

それは同じプロジェクトです。 新しいプロジェクト - > .NETコア - >コンソールアプリケーションを作成するだけです。 AssemblyTestという名前を付けました。コード全体を追加して質問が更新されました。 – borisdj

答えて

1

クラスの名前を指定する場合、あなたはそれが名前空間だ含まれて完全修飾名を指定する必要があります。したがって、このラインのニーズは微調整:

Type type = Assembly.GetEntryAssembly().GetType("ClassName");

をClassNameには、名前空間App.Logicである場合、行は次のようになります。

Type type = Assembly.GetEntryAssembly().GetType("App.Logic.ClassName");

だからあなたの更新されたコード指定した行は次のようになります。

Type type = Assembly.GetEntryAssembly().GetType("AssemblyTest.TestClass");

私はそれをテストしており、名前空間情報を含む適格なクラス名が使用される。

+1

はい、私もそれをチェックして動作します。どうも。 タイプを取得するために言及した別の方法を追加する: タイプtype = Type.GetType( "AssemblyTest.TestClass"); – borisdj

関連する問題