Использование обобщений в Unity ... InvalidCastException - PullRequest
5 голосов
/ 12 апреля 2010

Мое определение интерфейса: публичный интерфейс IInterface, где T: UserControl

Мое определение класса: публичный частичный класс App1Control: UserControl, IInterface

Раздел Unity моего 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]'

Я считаю, что в моем коде есть небольшая ошибка ... но это не такв состоянии выяснить что.Есть мысли?

1 Ответ

0 голосов
/ 19 августа 2011

из комментария от ОП Солнечный Д :

Произошла ошибка в определении моего App1Control. Проблема была исправлена, когда я изменил определение с:

public partial class App1Control : UserControl, myInterface<App1Control>

до:

public partial class App1Control : UserControl, myInterface<UserControl>
...