C# 无法创建接口C的实例#

C# 无法创建接口C的实例#,c#,reflection,interface,C#,Reflection,Interface,当基本接口属于某种类型时,我在尝试将接口添加到基本接口列表时遇到问题 我的接口定义如下: public interface IWorkspace<out TWorkspace> where TWorkspace : IWorkspaceBaseModel { } public interface IWorkspaceBaseModel : IViewBaseModel { } public interface ILogCollectionViewModel :

当基本接口属于某种类型时,我在尝试将接口添加到基本接口列表时遇到问题

我的接口定义如下:

    public interface IWorkspace<out TWorkspace> where TWorkspace : IWorkspaceBaseModel { }
    public interface IWorkspaceBaseModel : IViewBaseModel { }
    public interface ILogCollectionViewModel : IWorkspace<IWorkspaceBaseModel> { }
公共接口IWorkspace,其中TWorkspace:IWorkspaceBaseModel{}
公共接口IWorkspaceBaseModel:IViewBaseModel{}
公共接口ILogCollectionViewModel:IWorkspace{}
我使用以下代码获取所有接口:

    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);
          }
    }
foreach(AppDomain.CurrentDomain.GetAssemblies()中的变量程序集)
{
var工作空间=程序集
.GetTypes()
其中(t=>typeof(IWorkspace).IsAssignableFrom(t)和&t.IsInterface)
.ToList();
如果(workspaces.Count>0)
foreach(工作区中的var wvm)
{
var myInterface=(IWorkspaceBaseModel)Activator.CreateInstance(wvm);
}
}
我收到错误“无法创建接口实例”。当我输入以下代码时:

    var myInterface = (IWorkspace<IWorkspaceBaseModel>)Activator.CreateInstance(wvm);
var myInterface=(IWorkspace)Activator.CreateInstance(wvm);
然后,我要做的是,在创建后,将接口添加到基本接口列表中:

    var viewList = new List<IWorkspaceBaseModel>();

    viewList.Add(myInterface);    
var viewList=新列表();
添加(myInterface);

如果您能提供有关如何解决此问题的任何帮助或更好的解决方法,我们将不胜感激。

我不知道您的具体意图,但您只能创建类的实例(可以实现您的接口)

也不可能写入(如果IViewModel是接口):

您可以找到实现接口的类:

var myInstance = new IViewModel();
var assembly = this.GetType().GetTypeInfo().Assembly;
var classes = assembly.DefinedTypes.Where(type => type.ImplementedInterfaces.Any(i => i == typeof(IPageViewModel)));

如果要在以后创建实例,还必须检查非抽象类。

在发布的代码中没有具体的类,
CreateInstance
需要这些类。使用反射时也不能新建接口。您应该进一步了解
接口是什么以及如何使用它。我尝试使用.Where(t=>typeof(IWorkspace).IsAssignableFrom(t)和&!t.IsInterface来查找类而不是接口相反,但这并没有起作用,因为有时接口只能来自某些方法的返回值,而不能创建实例。我的具体类是:LogCollectionViewModel:WorkspaceBaseModel,ILogCollectionViewModel{}和WorkspaceBaseModel:IWorkspaceBaseModel{}我正在尝试获取继承IWorkspaceBaseModel的所有接口,并将它们添加到列表中,以便我可以使用它们进行导航如果要获取接口,需要检查类型是否为接口。type=>type.ImplementedInterfaces.Any(i=>i==typeof(IPageViewModel))&&type.isinterface如果我这样做并尝试将接口添加到我的列表中,我会收到一条“无法将'System.RuntimeType'类型的对象强制转换为'interfaceasemblytest.IWorkspaceBaseModel'类型”消息