【发布时间】:2018-06-14 09:46:28
【问题描述】:
我正在尝试了解 IoC 容器的概念。我发现一些消息来源说 IoC 容器的静态类是个坏主意,但我找不到在这个容器中不使用静态的好例子。我试图自己弄清楚,但没有任何结果。我在我的 WPF 应用程序中使用 Unity IoC Container,但我不需要使用 IoC 连接视图和视图模型的帮助,因为我理解它。我想将一些注册对象注入到我的视图模型的构造函数中:
public class MyViewModel
{
private readonly IExceptionLogger _exceptionLogger;
public MyViewModel(IExceptionLogger exceptionLogger)
{
_exceptionLogger = exceptionLogger;
}
}
我的容器类:
public class Bootstrapper
{
private readonly IUnityContainer _container;
public Bootstrapper()
{
_container = new UnityContainer();
}
public void RegisterTypes()
{
_container.RegisterType<IExceptionLogger, ExceptionLogger>();
}
}
现在,我被困住了。我希望如果我将它添加到我的 App.xaml.cs 中,ExceptionLogger 的新实例将被发送到构造函数:
protected override void OnStartup(StartupEventArgs e)
{
Bootstrapper bootstrapper = new Bootstrapper();
bootstrapper.RegisterTypes();
base.OnStartup(e);
}
但是,不幸的是,没有任何东西发送给它。我知道我错过了什么,但我不知道是什么。
如果有人知道任何关于 IoC 容器的非静态类的好文章,我将不胜感激。如果有人知道我的代码中遗漏了什么,请告诉我。
【问题讨论】:
-
如果你的类是
MyViewModel为什么你的构造函数命名为StartupVM? -
对不起,我已经修好了
-
您的引导程序超出范围并在您的启动方法退出后立即收集垃圾。
-
IoC 容器被静态类引用是正常的,这样它就不会超出范围。
标签: c# unity-container ioc-container