在.NetCore中动态获取类的实例

时间:2017-01-23 15:02:15

标签: attributes asp.net-core instance

我需要来自string的类实例来检查它是否具有某些属性。 我试过这样的

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

但是类型为空?

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

1 个答案:

答案 0 :(得分: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");

我已经测试了它,如果使用包含命名空间信息的完全限定的类名,它确实有用。