简单的注入器 - Windows窗体示例已损坏

时间:2015-11-05 21:26:15

标签: c# winforms simple-injector

我正在尝试在Windows窗体应用程序中使用Simple Injector。不幸的是,https://simpleinjector.readthedocs.org/en/latest/windowsformsintegration.html的文档不正确或已过时。

当您实际运行该示例时,会导致以下错误: The configuration is invalid. The following diagnostic warnings were reported: -[Disposable Transient Component] MainView is registered as transient, but implements IDisposable.

此外,我正在构建的应用程序是一个Winforms MVP(被动视图)项目。我可以将MainView的范围更改为单例并且它可以工作。但是对于我的生活,由于这个范围问题,我无法弄清楚如何打开其他窗户。有没有人在具有多个窗口的真实世界MVP winforms应用程序中成功使用SimpleInjector?我很想知道Presenters,Forms / Views和Main入口点的配置方式以及他们的Lifestyle范围是什么。

仅供参考,我尝试过使用LifetimeScoping和ExecutionContextScoping扩展,但绝对没有任何效果。也许这只是一个PEBKAC问题。

谢谢, 埃里克

2 个答案:

答案 0 :(得分:3)

使用container.RegisterSingleton< "对象" >();

http://simpleinjector.readthedocs.org/en/latest/lifetimes.html

答案 1 :(得分:3)

我在尝试重构的旧Winforms应用程序中遇到了类似的问题。

在我的情况下,我也相信你的表单是使用Application.Run()创建的。如果我们查看这个stackoverflow link,它会提到运行时会自动调用dispose()方法。

这意味着我们可以安全地忽略{strong>此胜利表单注册的警告,如simpleinjector docs中所述。

代码看起来像:

Registration registration = _container.GetRegistration(typeof(MainView)).Registration;
registration.SuppressDiagnosticWarning(DiagnosticType.DisposableTransientComponent, "Main Windows Form (MainView) will be automatically disposed by runtime as it is registered using Application.Run()");