Как можно разрешить статический класс в Unity Framework? - PullRequest
2 голосов
/ 01 апреля 2010

Я, как единая структура, решил разрешить статический класс «MyStaticObject», указанный в моем конфигурационном файле. Так как мой класс статический, я получаю сообщение об ошибке «Тип StaticObject не имеет доступного конструктора.»

Мой конфигурационный файл выглядит следующим образом:

  <unity>
    <typeAliases>
      <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
      <typeAlias alias="StaticObject" type="MyStaticAssembly.MyStaticObject, MyStaticAssembly, Version=1.0.0.0" />
      <typeAlias alias="staticobject" type="MyStaticAssembly.MyStaticObject, MyStaticAssembly" />
    </typeAliases>

    <containers>
      <container> 
        <types>
          <type type="StaticObject" mapTo="staticobject" name="My Static Object">
            <lifetime type="singleton"/>
          </type>
        </types>
      </container>
    </containers>
  </unity>

Буду очень признателен за любую помощь.

1 Ответ

4 голосов
/ 01 апреля 2010

Unity (или любая инфраструктура контейнера IoC) - это суперфабрика, которая создает объекты и передает их вам. Как предполагается создать экземпляр статического класса?

Рефакторинг вашего дизайна для использования нестатического класса. При необходимости создайте класс, который оборачивает статический класс и делегирует ему.

РЕДАКТИРОВАТЬ: Если вы хотите, чтобы контейнер вызывал существующий статический метод фабрики, вы можете использовать StaticFactoryExtension .

РЕДАКТИРОВАТЬ: Если вам не нужно менять реализации после развертывания, я бы рекомендовал избегать конфигурации XML и писать беглый код конфигурации (вызывая container.RegisterType и т. Д.) Вместо этого в одном месте вашего приложения. Вы все еще можете использовать отдельный код конфигурации в своих модульных тестах.

...