Как получить тип класса в главном проекте через класс в проекте библиотеки классов - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть проект библиотеки классов, который присоединен к основному проекту, и в этом проекте библиотеки классов у меня есть класс с именем SQSQueueScheduler.cs. В этом классе я написал следующий код

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

The Контакты вот базовый класс, с помощью которого я хочу динамически создать экземпляр производного класса ChildContacts .Этот базовый класс присутствует в проекте библиотеки классов, а производный класс - на основном веб-сайте.Значением переменной className является Child.ChildContacts (AIST - это пространство имен, а AISTContacts - это имя класса).Здесь я получаю значение Null в переменной myClass.Код, который я написал в web.config основного проекта:

<section name="bolteContactConfiguration" type="TDNBolte.Contacts,3DN Bolte" requirePermission="false"/>
<bolteContactConfiguration name ="Contacts" className="Child.ChildContacts"/>

Здесь 3DN Bolte - это название сборки проекта библиотеки классов.

Я быХотелось бы спросить, есть ли способ получить тип класса, присутствующий на главном веб-сайте (ChildContacts) через код, написанный в классе (SQSQueueScheduler) проекта библиотеки классов?

1 Ответ

0 голосов
/ 18 сентября 2018

Конкретная перегрузка GetType, которую вы используете, указывает:

Если тип находится в текущей выполняющейся сборке или в Mscorlib.dll, достаточно указать имя типа, соответствующее его пространству имен.

Но тип, который вы пытаетесь загрузить, отсутствует ни в Mscorlib.dll, ни в текущей сборке. Таким образом, вам необходимо предоставить квалифицированное имя сборки. Что-то вроде Child.ChildContacts, MainProject.dll (при условии, что сборка не имеет строгого имени).

Но обратите внимание на мои комментарии, что вы, вероятно, должны вместо этого иметь основной проект, явно предоставляющий конфигурационные или фабричные методы в библиотеку классов 1 , чтобы он не пытался отделить потребляющее приложение с помощью отражения.


1 Или включите Dependency Injection 2 и спроектируйте свою библиотеку классов так, чтобы она присутствовала. Затем просто перечислите в качестве требования для использования вашей библиотеки классов, чтобы в контейнере была зарегистрирована подходящая реализация Contacts.

2 например. Внедрение зависимостей в ASP.Net Core

...