2017-03-04 58 views
2

我想配置簡單的注射器工作,但我似乎無法通過這個。我按照如何在此link中修復此問題的說明進行操作,但無效。以下是錯誤消息:簡單的注射器診斷警告一次性瞬變

NotificationEntities註冊爲瞬態,但實現了 IDisposable。

這裏是由EF生成的代碼到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所以它應該已經實現的是,正確嗎?

回答

1

NotificationEntities是從EF生成的,所以它應該已經實現了,對嗎?

是,NotificationEntities確實實現IDisposable,這是警告正是telling你:

的註冊已取得與該實現IDisposable組件的瞬態生活方式。

這是一個問題,因爲:

實現IDisposable通常需要確定性的清理,但簡單的噴油器不會隱跟蹤和處理具有瞬態生活方式註冊組件的組件。

爲了解決這個問題,你應該:

註冊與範圍的生活方式是適合你正在使用的應用程序的組件。

換句話說,註冊NotificationEntities如下:

container.Register<NotificationEntities>(Lifestyle.Scoped); 
+1

真棒,即做到了。我讚賞這個解釋! –