C# 如何通过类库项目中的类获取主项目中的类的类型
我有一个类库项目,它附加到一个主项目,在这个类库项目中,我有一个名为sqsquescheduler.cs的类,在这个类下,我编写了以下代码C# 如何通过类库项目中的类获取主项目中的类的类型,c#,inheritance,class-library,custom-configuration,C#,Inheritance,Class Library,Custom Configuration,我有一个类库项目,它附加到一个主项目,在这个类库项目中,我有一个名为sqsquescheduler.cs的类,在这个类下,我编写了以下代码 Contacts contact = (Contacts)ConfigurationManager.GetSection("bolteContactConfiguration"); if (contact != null) { className = contact.ClassName; Ty
Contacts contact = (Contacts)ConfigurationManager.GetSection("bolteContactConfiguration");
if (contact != null)
{
className = contact.ClassName;
Type myclass = Type.GetType(className);
objContacts = (Contacts)Activator.CreateInstance(myclass);
}
联系人这里是一个基类,我想通过它动态创建派生类ChildContacts的instance。这个基类出现在类库项目中,派生类出现在主网站中。变量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是类库项目的程序集名称
我想问一下,有没有办法通过类库项目的类(sqsquescheduler)中编写的代码来获取主网站(ChildContacts)中的类类型 您正在使用的特定状态:
如果类型位于当前执行的程序集中或Mscorlib.dll中,则提供由其命名空间限定的类型名就足够了
但是您尝试加载的类型既不在Mscorlib.dll中,也不在当前程序集中。因此,您需要提供程序集限定名。类似于Child.ChildContacts,MainProject.dll的内容(假设程序集不是强名称)
但是请注意,我的评论是,您可能应该让主项目显式地向类库1提供配置或工厂方法,这样它就不会试图通过反射分离消费应用程序
1或接受依赖注入2,并设计您的类库以假设存在依赖注入。然后简单地将在容器中注册合适的Contacts
实现列为使用类库的要求
2E.g 更正常的做法是让类库公开一些方法,让使用者将此类信息传递给它,和/或向它提供工厂方法,通过这些方法可以构造所需的对象。让类库颠倒正常关系并戳穿消费者的类在这里似乎是错误的。+1用于依赖注入-这正是根据启动/执行项目向lib项目提供类所需要的