无法创建接口C#的实例

时间:2017-05-12 10:49:58

标签: c# reflection interface

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

我的界面定义如下:

    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);    

任何有关如何解决此问题的帮助或更好的方法都将非常感激。

1 个答案:

答案 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)));

如果您想在之后创建实例,还必须检查非抽象类。