我正在研究一个中等规模的WPF应用程序(MVVM),这个应用程序在将来应该是可扩展和可维护的。因此我决定使用一个IoC容器(在这种情况下是Unity)来保持灵活性。何处放置和配置WPF应用程序中的IoC容器?
但是我不确定在WPF应用程序中放置和配置Unity的位置。
我想容器应该可以全局访问,所以它应该可能去应用程序类。但是,我应该把它作为静态属性吗?我应该在Application_Startup()事件处理程序中配置它吗?
如:
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public static UnityContainer MyUnityContainer;
private void Application_Startup(object sender, StartupEventArgs e)
{
// instantiate and configure Unity
}
}
这样我就可以通过静态属性,从任何地方访问容器中的应用:
App.MyUnityContainer
我想这是一个办法做到这一点,但我我不确定这个问题是否有更好的做法,特别是WPF应用程序。
我怎样才能完全忘记它的存在?你会想解决你的依赖关系图最高层的依赖关系,不是吗?我的意思是,例如,按钮点击事件处理程序应该将“Customer”保存到使用“CustomerRepository”的数据库。你不需要为了使用它而解决'CustomerRepository',因此再次需要IoC容器吗? – 2012-10-15 21:10:07
@JoaoMilasch最高层?绝对。但为什么最顶层是一个窗口而不是App类?在你的情况下,你有一个窗口需要一个存储库,可以通过构造函数注入注入。然后,您可以在调用容器的App的Startup事件中解析MainWindow。 – 2012-10-16 07:27:43
啊哈!你间接回答了我的问题,现在这一切都很有意义。我想我需要在App类上配置容器,但Windows需要直接访问配置的容器。相反,如果我按照你的建议去做,容器对象只需要存在于App类中。请纠正我,如果我错了,请! :) 谢谢! – 2012-10-16 11:36:55