【发布时间】:2017-05-12 10:49:58
【问题描述】:
当基本接口属于某种类型时,我在尝试将接口添加到基本接口列表时遇到问题。
我的接口定义如下:
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);
任何有关如何解决此问题或更好的解决方法的帮助将不胜感激。
【问题讨论】:
-
在发布的代码中没有
CreateInstance需要的具体类。使用反射时也不能新建接口。 -
您应该多了解一下
interface是什么以及如何使用它。 -
我尝试使用 .Where(t => typeof(IWorkspace
).IsAssignableFrom(t) && !t.IsInterface) 来查找类而不是接口,但这也不起作用 -
有时一个接口只能来自某些方法的返回值,而不是创建的实例。所以你可能找不到这样的构造函数。
-
我的具体类是:LogCollectionViewModel : WorkspaceBaseModel, ILogCollectionViewModel { } 和 WorkspaceBaseModel : IWorkspaceBaseModel { }
标签: c# reflection interface