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

问题描述 投票:1回答: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);
        }

这里的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)中存在的类的类型?

c# inheritance class-library custom-configuration
1个回答
2
投票

您正在使用的特定overload of GetType说明:

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

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

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


1或者拥抱Dependency Injection2并设计你的类库以假设存在一个。然后只需将其列为使用类库的要求,即在容器中注册了合适的Contacts实现。

2E.g. Dependency injection in ASP.Net Core

© www.soinside.com 2019 - 2024. All rights reserved.