2017-03-04 5 views
2

シンプルなインジェクターを動作させるように設定しようとしていますが、これをパスすることはできません。私はこのlinkでこれを修正する方法の指示に従ったが、うまくいかなかった。エラーメッセージは次のとおりです。シンプルなインジェクター診断の警告使い捨てのトランジェント

NotificationEntitiesは一時的に登録されていますが、 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から生成されていますか?

答えて

1

NotificationEntitiesはEFから生成されているため、既に実装しているはずですが、正しいですか?

はい、NotificationEntitiesIDisposableを実装していますが、これは警告があなたがtellingですまさにです:

登録がIDisposableインターを実装するコンポーネントのための一時的なライフスタイルで作られています。

ので、これは問題です:

IDisposableは通常、決定論的なクリーンアップが、シンプルなインジェクターは、暗黙的に過渡的なライフスタイルに登録されているコンポーネントを追跡し、処分しない必要があるだろう実装するコンポーネント。

は、あなたがしなければならない。この問題を解決するには、次の

は、あなたが作業しているアプリケーションに適しているスコープのライフスタイルを持つコンポーネントを登録します。次のように

言い換えれば、あなたのNotificationEntitiesを登録します。

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

素晴らしい、それをやっています。私はこれについての説明に感謝します! –

関連する問題