У меня есть несколько классов и интерфейсов в моем SDK:C# создать экземпляр загруженного типа derivied от общего типа
public interface IUser
{
string Name { get; set; }
}
public abstract class SettingsBase<TUser> where TUser : IUser
{
public ObservableCollection<TUser> Users { get; set; }
}
public abstract class Page<TUser> where TUser : IUser
{
public SettingsBase<TUser> Settings { get; set; }
}
У меня есть DLL-библиотеку с общественными классами:
public class ConfigPage : Page<User>
{
}
public class User : IUser
{
public string Name { get; set; }
}
public class Settings : SettingsBase<User>
{
private int _additionalSetting;
}
Я хочу проверить, если .dll имеет класс ConfigPage, derivied из страницы:
var dll = Assembly.LoadFrom(@"libraryName.dll");
var type = dll.GetExportedTypes().FirstOrDefault(t => t.Name == "ConfigPage"); // the type is Page<User>
var isIUser = type.BaseType.GetGenericArguments()[0].GetInterfaces().Contains(typeof(IUser));
хорошо, все хорошо, но в конце концов мой вопрос is:
Как получить доступ к настройкам SettingsBase Settings?
Почему это возвращает null? :
Activator.CreateInstance(type) as Page<IUser> // type is Page<User>, User implement IUser
вы не можете бросить тип страницу попытаться привести его к странице –
@MahdiFarhani Я думаю, точка OP не знает конкретного типа «Пользователь» - они просто знают свой «IUser» – Jamiec
@up. Точно, SDK не знает класс пользователя. –