Я пытаюсь обернуть голову вокруг наилучшего способа использования IoC в своем приложении для внедрения зависимостей, однако у меня есть небольшая проблема.
Я использую свободную реализацию шаблона MVP с приложением WPF. По сути, создается класс презентатора, а представление и задача (например, IEmployeeView и IEmployeeTask для EmployeePresenter) внедряются в презентатор.
Я бы хотел использовать контейнер IoC (я пробую Unity, хотя я предполагаю, что это также произойдет и с другими, такими как ninject или Structure Map) вместо ручного внедрения этих экземпляров, однако, если презентатор создан (или разрешается из контейнера IoC) при асинхронном вызове делегата или в потоке событий (например, без STA-потоков), а затем при создании нового экземпляра окна WPF выдается следующее исключение:
Текущая операция сборки (ключ сборки
Ключ сборки [ namespace .Window1, null])
Ошибка: вызывающий поток должен быть
STA, потому что многие компоненты пользовательского интерфейса
требует этого.
Теперь я знаю, что новые экземпляры окон и т. Д. Должны быть STA, однако возможно ли использовать контейнер IoC для внедрения зависимостей, даже если пользовательский интерфейс должен быть создан в потоке STA?
Из рассмотрения этой проблемы может показаться, что разрешаемый класс / тип создается во время разрешения, а не при его регистрации ...