1

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

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

这里的联系人是一个基类,我想通过它动态创建派生类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)中存在的类的类型?

4

1 回答 1

2

您正在使用的特定重载GetType状态:

如果该类型在当前执行的程序集中或在 Mscorlib.dll 中,则提供由其命名空间限定的类型名称就足够了。

但是您尝试加载的类型既不在当前程序集中Mscorlib.dll也不在当前程序集中。因此,您需要提供程序集限定名称。类似的东西Child.ChildContacts, MainProject.dll(假设程序集不是强命名的)。

但是请注意我的评论,您可能应该让主项目显式地向类库1提供配置或工厂方法,这样它就不会试图通过反射来分离消费应用程序。


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

2例如 ASP.Net Core 中的依赖注入

于 2018-09-18T06:38:54.553 回答