如何通过类库项目中的类获取主项目中类的类型

时间:2018-09-18 06:27:37

标签: c# inheritance class-library custom-configuration

我有一个附加到主项目的类库项目,在这个类库项目中,我有一个名为SQSQueueScheduler.cs的类,在该类下我编写了以下代码

Contacts contact = (Contacts)ConfigurationManager.GetSection("bolteContactConfiguration");
 if (contact != null)
        {
            className = contact.ClassName;
            Type myclass = Type.GetType(className);
            objContacts = (Contacts)Activator.CreateInstance(myclass);
        }

这里的 Contacts 是一个基类,我想通过该基类动态创建派生类 ChildContacts 的实例。该基类在类库项目中存在,派生类在主网站中存在。变量className的值是Child.ChildContacts(AIST是名称空间,AISTContacts是类的名称)。在这里,我在myClass变量中获得了 Null 值。 我在主项目的web.config中编写的代码是

<section name="bolteContactConfiguration" type="TDNBolte.Contacts,3DN Bolte" requirePermission="false"/>
<bolteContactConfiguration name ="Contacts" className="Child.ChildContacts"/>

此处 3DN Bolte 是类库项目的程序集的名称。

我想问一下,有没有一种方法可以通过类库项目的类(SQSQueueScheduler)中编写的代码来获取主网站(ChildContacts)中存在的类的类型?

1 个答案:

答案 0 :(得分:2)

您使用的特定overload of GetType状态:

  

如果类型在当前正在执行的程序集中或在Mscorlib.dll中,则只需提供其名称空间限定的类型名称即可。

但是您要加载的类型既不在Mscorlib.dll中也不在 current 程序集中。因此,您需要提供程序集合格名称。像Child.ChildContacts, MainProject.dll之类的东西(假设程序集的名称不是强名称)。

但是请注意我的评论,您可能应该改为让主项目为类库显式提供配置或工厂方法 1 ,这样它就不会尝试通过反射将消耗的应用程序拆开。 / p>


1 或者接受依赖注入 2 并设计您的类库以假定存在一个。然后只需将其列出为使用类库的要求,即在容器中注册了合适的Contacts实现。

2 例如Dependency injection in ASP.Net Core