Как проверить, разрешил ли контейнер Unity одноэлементный тип? - PullRequest
1 голос
/ 15 октября 2011

Учитывая следующую единичную конфигурацию:

<register type="MyProgram.IListDetailsView, MyProgram"
            mapTo="MyProgram.ListDetailsView, MyProgram"
            name="Contacts List">
    <lifetime type="singleton"/>
</register>

Я хочу выполнить проверку в коде следующим образом:

bool firstCall = !container.ContainsInstance("Contacts List"))

IListDetailsView  listDetailsView = container.Resolve<IListDetailsView>("Contacts List");

if(firstCall)
{  
// do some work on listDetailsView
}

Существует ли эквивалент этого (составленного) метода ContainsInstanceили каким-то другим способом получить данные о состоянии?Я хочу проверить, что Unity ссылается на экземпляр, а не на то, что тип зарегистрирован.

Ответы [ 2 ]

0 голосов
/ 16 октября 2011

Тогда я предлагаю вам сделать что-то не так.Компоненты пользовательского интерфейса должны быть созданы и уничтожены по мере необходимости.Если вам действительно нужно это сделать, тогда используйте статическое логическое значение, которое указывает, был ли запущен ваш код «сделать один раз».Опять же, сделайте это в конструкторе.Вам нужно будет заблокировать конструктор, если вам нужно обеспечить безопасность потоков.С другой стороны, вы можете выполнять работу в статическом ctor для просмотра деталей;.Net гарантирует, что он запускается только один раз при первом обращении к любому статическому члену.

0 голосов
/ 15 октября 2011

Надеюсь, я не понял ваше требование.Но для меня кажется, что вы хотите знать, когда создается экземпляр вида для выполнения некоторой работы по инициализации.Обычно это делается с помощью конструктора.

Вы регистрируете свое представление в единстве.Это не создает экземпляр представления.Первый запрос разрешения для типа представления заставляет unity создать новый экземпляр представления.Поэтому все, что вам нужно сделать во время инициализации представления, можно сделать внутри конструктора.

...