конфигурация единства открытых общих типов - PullRequest
2 голосов
/ 21 сентября 2010

Я пытаюсь использовать единство для разрешения общего экземпляра IChannelFactory<ISomeType> для создания каналов для службы, которую я написал.

Проблема в том, что конкретная версия этого класса ChannelFactory<ISomeType> принимаеттип бетона System.ServiceModel.Channels.Binding в качестве параметра.

Моя первая проблема состояла в том, что он не смог найти System.ServiceModel, но я решил это, указав супер полное имя (включая номер версии и т. Д.).Так что теперь я могу взломать код, но он взрывается, когда я пытаюсь разрешить IChannelFactory

Моя конфигурация такая:

      <!--binding-->
      <type name="customerBinding" type="System.ServiceModel.BasicHttpBinding, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
        <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
          <constructor>
            <param name="configurationName" parameterType="System.String">
              <value value="CustomerAccountService" />
            </param>                
          </constructor>
        </typeConfig>
      </type>

      <!-- customer account channel factory -->
      <type name="customerChannelFactory" 
            type="System.ServiceModel.Channels.IChannelFactory`1[[ServiceContracts.Customer.ICustomerAccountProvider, ServiceContracts.Customer]], System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" 
            mapTo="System.ServiceModel.ChannelFactory`1[[ServiceContracts.Customer.ICustomerAccountProvider, ServiceContracts.Customer]], System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
        <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
          <constructor>
            <param name="binding" parameterType="System.ServiceModel.Channels.Binding, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
              <dependency name="customerBinding" />
            </param>
          </constructor>
        </typeConfig>
      </type>          

Ошибка, которую я получаю, заключается в том, что она не можетСоздайте тип, потому что это интерфейс, даже если отображение на конкретный тип явно присутствует.Обратите внимание, что я пытаюсь ограничить разрешение типов до определенных типов, чтобы оно работало только с IChannelFactory<ISomeType>, а не IChannelFactory<ISomeOtherType>, например.возможно, это неправильный способ сделать что-то?

Если я просто пытаюсь разрешить Binding изолированно, он говорит, что он не может избавиться от неоднозначности от других конструкторов, принимающих один параметр (хотя я определил тип параметра длябыть строкой!)

Любые идеи или указатели, что я делаю не так, здесь выглядывает?Или, может быть, даже решение; -)

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 сентября 2010

после долгих поисков кажется, что это просто невозможно в версии 1.2?кажется, что Unity 1.2 не поддерживает открытые универсальные типы, эта функция была введена в Unity 2.0.

См. следующее: http://davidhayden.com/blog/dave/archive/2008/03/25/UnityDependencyInjectionOpenGenericTypes.aspx

, если кто-то хотел бы доказать обратное, я быбудьте добры приветствовать: -)

0 голосов
/ 21 сентября 2010

Вы можете настроить общий интерфейс / реализацию следующим образом:

<type name="customerChannelFactory" 
            type="System.ServiceModel.Channels.IChannelFactory`1, System.ServiceModel" 
            mapTo="System.ServiceModel.ChannelFactory`1, System.ServiceModel">
        <typeConfig>
          <constructor>
            <param name="binding" parameterType="System.ServiceModel.Channels.Binding, System.ServiceModel">
              <dependency name="customerBinding" />
            </param>
          </constructor>
        </typeConfig>
      </type>

подробнее о msdn - поддержка конфигурации для универсальных

...