mat*_*i82 15 wpf containers inversion-of-control unity-container where
我正在研究中型WPF应用程序(MVVM),该应用程序将来应该是可扩展和可维护的.因此,我决定使用IoC容器(在本例中为Unity)来保持灵活性.
但是我不确定在WPF应用程序中放置和配置Unity的位置.
我想容器应该是全局可访问的,所以应该可以去Application类.但是我应该把它作为静态属性吗?我应该在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
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就能通过static属性从应用程序的任何地方访问容器:
App.MyUnityContainer
Run Code Online (Sandbox Code Playgroud)
我想这是一种方法,但我不确定这个问题是否有更好的做法,特别是对于WPF应用程序.
看看组合根模式.你想要做的是在你的Startup事件处理程序中初始化它,并忘记它存在于应用程序的其余部分.
您正在尝试实施服务定位器模式,根据许多模式,这是一个较差的解决方案.
让我发布我已经得出的结论,并希望它能帮助人们.纠正是否有任何错误!:P
我想我们会考虑这样的事情:
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
UnityContainer myUnityContainer = new UnityContainer();
//make sure your container is configured
myUnityContainer.RegisterType<ISomeDependency, SomeDependencyImplementation>();
myUnityContainer.RegisterType<IMainWindow, MainWindow>();
myUnityContainer.Resolve<IMainWindow>().Show();
}
}
public partial class MainWindow : Window, IMainWindow
{
private ISomeDependency _someDependency;
public MainWindow(ISomeDependency someDependency)
{
_someDependency = someDependency;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,没有全局变量或单例,只要MainWindow执行,容器就会存活,并且只要容器知道它们,就会自动解析此组合图后面的所有依赖项.
归档时间: |
|
查看次数: |
6015 次 |
最近记录: |