簡體   English   中英

如何通過類庫項目中的類獲取主項目中類的類型

[英]How to get the Type of a class in Main Project through a class in Class Library Project

我有一個附加到主項目的類庫項目,並且在該類庫項目中,有一個名為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)中存在的類的類型?

您正在使用GetType的特定重載狀態:

如果類型在當前正在執行的程序集中或在Mscorlib.dll中,則只需提供其名稱空間限定的類型名稱即可。

但是,您嘗試加載的類型既不在Mscorlib.dll也不在當前程序集中。 因此,您需要提供程序集合格名稱。 諸如Child.ChildContacts, MainProject.dll類的東西(假定程序集不是強命名的)。

但是請注意我的評論,您可能應該改為讓主項目為類庫1顯式提供配置或工廠方法,以便它不會嘗試通過反射將消耗的應用程序拆開。


1或者接受Dependency Injection 2,並設計您的類庫以假定其中一個存在。 然后只需將其列出為使用類庫的要求,即在容器中注冊了合適的Contacts實現。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM