Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过类库项目中的类获取主项目中的类的类型_C#_Inheritance_Class Library_Custom Configuration - Fatal编程技术网

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

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

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

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项目提供类所需要的