Wpf IoC和用户界面

Wpf IoC和用户界面,wpf,dependency-injection,inversion-of-control,sta,Wpf,Dependency Injection,Inversion Of Control,Sta,我正在尝试在我的应用程序中使用IoC进行依赖注入的最佳方法,但是我有一个小问题 我在WPF应用程序中使用MVP模式的松散实现。本质上,演示者类被实例化,视图和任务(例如EmployeeView和EmployeeTask for EmployeePresenter)被注入演示者 我希望使用IoC容器(我正在尝试Unity,尽管我猜这也会发生在ninject或Structure Map等其他容器中),而不是手动注入这些实例,但是如果演示者是在异步委托调用或事件线程(例如,非STA线程化)上创建的(或

我正在尝试在我的应用程序中使用IoC进行依赖注入的最佳方法,但是我有一个小问题

我在WPF应用程序中使用MVP模式的松散实现。本质上,演示者类被实例化,视图和任务(例如EmployeeView和EmployeeTask for EmployeePresenter)被注入演示者

我希望使用IoC容器(我正在尝试Unity,尽管我猜这也会发生在ninject或Structure Map等其他容器中),而不是手动注入这些实例,但是如果演示者是在异步委托调用或事件线程(例如,非STA线程化)上创建的(或从IoC容器解析的),则然后,创建WPF窗口的新实例会引发以下异常:

当前生成操作(生成密钥 生成键[namespace.Window1,null]) 失败:调用线程必须为空 STA,因为很多UI组件 需要这个

现在,我知道新的窗口实例等需要是STA,但是,即使UI必须在STA线程上创建,也可以使用IoC容器进行依赖注入吗


从这个问题来看,似乎正在解析的类/类型是在解析时实例化的,而不是在其注册时实例化的…

我会说使用工厂来创建Presenter对象;这样,您就可以在STA线程中从PresenterFactory中创建Presenter的通用实例,然后在需要时将其传递出去。

我想使用Factory来创建Presenter对象;这样,您就可以在STA线程中从PresenterFactory中创建演示者的通用实例,然后在需要时将其分发出去。

您的问题与IoC无关,只能从创建WPF对象的同一线程访问WPF对象,因此您必须在与GUI其余部分相同的线程(而不仅仅是任何STA线程)上创建presenter


使用Dispatcher.BeginInvoke在主线程中运行代码,并从主线程调用Ioc contianer。

您的问题与Ioc无关,只能从创建WPF对象的同一线程访问它-因此您必须在与GUI的其余线程(而不仅仅是任何STA线程)相同的线程上创建演示者


使用Dispatcher.BeginInvoke在主线程中运行代码,并从主线程调用Ioc contianer。

您提到Unity时,是否考虑过使用同样使用它的复合应用程序库?StockTrader示例应用程序使用Unity将视图注入表示模型。。如果您不想实际使用CAL-更多信息: (或)


您可能仍然能够了解他们是如何解决这个问题的。

您提到Unity时,是否考虑过使用同样使用Unity的复合应用程序库?StockTrader示例应用程序使用Unity将视图注入表示模型。。如果您不想实际使用CAL-更多信息: (或)


您可能仍然能够了解他们是如何解决这个问题的。

这是最可能的原因,IoC容器在WPF中工作正常。这是最可能的原因,IoC容器在WPF中工作正常。