在 Unity 中使用泛型... InvalidCastException

Posted

技术标签:

【中文标题】在 Unity 中使用泛型... InvalidCastException【英文标题】:Using generics in Unity ... InvalidCastException 【发布时间】:2011-02-07 03:38:08 【问题描述】:

我的接口定义是: 公共接口 IInterface 其中 T:UserControl

我的班级定义是: 公共部分类 App1Control : UserControl, IInterface

我的 app.config 的统一部分如下所示:

  <unity>
    <typeAliases>
      <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
      <typeAlias alias="myInterface" type="MyApplication.IInterface`1, MyApplication" />
      <typeAlias alias="App1" type="MyApplication.App1Control, MyApplication" />
    </typeAliases>
    <containers>
      <container> 
        <types>
          <type type="myInterface" mapTo="App1" name="Application 1">
            <lifetime type="singleton"/>
          </type>
        </types>
      </container>
    </containers>
  </unity>

应用程序运行良好,但以下代码给出了 InvalidCastException

container.Resolve<IInterface<UserControl>>("Application 1");

错误信息是:

无法将“MyApplication.App1Control”类型的对象转换为“MyApplication.IInterface`1[System.Windows.Forms.UserControl]”类型的对象

我相信我的代码中有一个小错误......但我无法弄清楚是什么。有什么想法吗?

【问题讨论】:

嗨 Miguel,我的 App1Control 的定义有误。当我将定义从 public partial class App1Control : UserControl, myInterface ..... 更改为 ...... public partial class App1Control : UserControl, myInterface 时,问题已得到解决 请发表您的评论作为答案并接受它作为正确的答案。 【参考方案1】:

来自 OP Sunny D 的评论:

我的 App1Control 的定义有误。当我从以下位置更改定义时,问题已解决:

public partial class App1Control : UserControl, myInterface<App1Control>

到:

public partial class App1Control : UserControl, myInterface<UserControl>

【讨论】:

以上是关于在 Unity 中使用泛型... InvalidCastException的主要内容,如果未能解决你的问题,请参考以下文章

请教一个unity有关于泛型参数的问题

unity的C#学习——泛型的创建与继承泛型集合类泛型中的约束和反射

蓝鸥Unity开发基础二——课时22 ArrayList

蓝鸥Unity开发基础二——课时21 泛型

Unity3D泛型对象池

[Unity] C#中级编程 - 04 - 泛型/构造函数/ref