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'类型”消息