当基本接口属于某种类型时,尝试将接口添加到基接口列表时遇到问题。
我的界面定义如下:
public interface IWorkspace<out TWorkspace> where TWorkspace : IWorkspaceBaseModel { }
public interface IWorkspaceBaseModel : IViewBaseModel { }
public interface ILogCollectionViewModel : IWorkspace<IWorkspaceBaseModel> { }
我使用以下代码获取所有接口:
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
var workspaces = assembly
.GetTypes()
.Where(t => typeof(IWorkspace<IWorkspaceBaseModel>).IsAssignableFrom(t) && t.IsInterface)
.ToList();
if (workspaces.Count > 0)
foreach (var wvm in workspaces)
{
var myInterface = (IWorkspaceBaseModel)Activator.CreateInstance(wvm);
}
}
我收到错误“无法创建接口的实例”。当我以下代码:
var myInterface = (IWorkspace<IWorkspaceBaseModel>)Activator.CreateInstance(wvm);
我想要做的是在创建时将接口添加到基接口列表中:
var viewList = new List<IWorkspaceBaseModel>();
viewList.Add(myInterface);
任何有关如何解决此问题的帮助或更好的方法都将非常感激。
答案 0 :(得分:1)
我不知道你的意图是什么,但你只能创建类的实例(可以实现你的接口)。
它也不可能写(如果IViewModel是一个接口):
var myInstance = new IViewModel();
您可以找到实现接口的类:
var assembly = this.GetType().GetTypeInfo().Assembly;
var classes = assembly.DefinedTypes.Where(type => type.ImplementedInterfaces.Any(i => i == typeof(IPageViewModel)));
如果您想在之后创建实例,还必须检查非抽象类。