Вы не можете привести к IWorker<T>
, не указав, что такое T
. Если вы сделаете это, ваш первый пример верен:
IWorker<Person> iWorkInstalce = (IWorker<Person>)Activator.CreateInstance(typeof(PersonPlugin));
Можно использовать отражение в классе PersonPlugin
, чтобы найти его реализацию IWorker<T>
, а затем выяснить, что такое T
, но это только любое использование в качестве среды выполнения, оно вам вообще не поможет в коде.
Если вы знаете, что вы ожидаете от T
, укажите это явно. В противном случае, вместо этого приведите не универсальный IWork
и передайте ему версии ваших методов, которые возвращают Object
. Если вы не знаете, что такое T
во время компиляции, наличие общего IWorker<T>
не может вам здесь помочь.
Если вашему приложению нужно знать, с каким типом работает ваш плагин во время выполнения, оно может вызвать свойство GetType
.