简单的注射器诊断警告一次性瞬态
我正在尝试配置简单的注入器工作,但我似乎无法通过这个。 我按照说明如何在此链接中修复此问题,但它不起作用。 这是错误消息:
NotificationEntities注册为transient,但实现了IDisposable。
这是SimpleInjectorInitializer.cs的代码
public static void Initialize() { var container = new Container(); container.Options.DefaultScopedLifestyle = new WebRequestLifestyle(); InitializeContainer(container); container.RegisterMvcControllers(Assembly.GetExecutingAssembly()); container.Verify(); DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container)); } private static void InitializeContainer(Container container) { container.Register(); }
NotificationEntities是从EF生成的,所以它应该已经实现了,对吗?
NotificationEntities是从EF生成的,所以它应该已经实现了,对吗?
是的, NotificationEntities
确实实现了IDisposable
,这正是警告告诉你的:
已经使用Transient生活方式注册了实现IDisposable的组件。
这是一个问题,因为:
实现
IDisposable
的组件通常需要确定性清理,但Simple Injector不会隐式跟踪和处理使用瞬态生活方式注册的组件。
要解决这个问题,您应该:
使用适合您正在使用的应用程序的范围生活方式注册组件。
换句话说,注册您的NotificationEntities
如下:
container.Register(Lifestyle.Scoped);