我正在尝试配置简单的注入器工作,但我似乎无法通过这个。我按照有关如何解决这个问题的说明进行了link,但它没有奏效。以下是错误消息:
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<IEmailTemplateRepository, EmailTemplateRepository>();
}
NotificationEntities是从EF生成的,所以它应该已经实现了,对吗?
答案 0 :(得分:10)
NotificationEntities是从EF生成的,所以它应该已经实现了,对吗?
是的,NotificationEntities
确实实施了IDisposable
,这正是警告telling你:
使用Transient生活方式为实现IDisposable的组件进行了注册。
这是一个问题,因为:
实现
IDisposable
的组件通常需要确定性清理,但Simple Injector不会隐式跟踪和处理使用瞬态生活方式注册的组件。
要解决此问题,您应该:
使用适合您正在使用的应用程序的范围生活方式注册组件。
换句话说,请按以下方式注册NotificationEntities
:
container.Register<NotificationEntities>(Lifestyle.Scoped);