2

Windows ランタイム コンポーネントに IBackgroundTask を実装していて、ロガーの依存関係を挿入したいのですが、バックグラウンド タスクを呼び出すとアプリケーションが終了します。コンストラクターにも入りません。Ninject を DI コンテナーとして使用していますが、アプリ内の他の場所で問題なく使用できます。

私はこのようなことをしたいと思います:

private readonly ILog _logger;

public BackroundTask(ILog logger)
{
    _logger = logger;
}

    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        var deferral = taskInstance.GetDeferral();

        try
        {
            // do something here
        }
        catch (Exception ex)
        {
            // log the error with injected logger...
            logger.ErrorFormat("{0}Error in QueueTimer {1}{0}",
                Environment.NewLine, ex.ToString());
        }

        deferral.Complete();
    }

何を試しても成功せず、呼び出し元の .cs ファイルで OnComplete メソッドにログオンするだけです。

4

1 に答える 1

0

Windows ストア アプリケーションの作成に関する私の限られた経験では、バックグラウンド タスク用の既定のコンストラクターを指定する必要があります。他のコンストラクターは呼び出されません。

ただし、これについては間違っていることを願っています。バックグラウンド タスクの依存関係を渡すことができるのは実用的ですが、タスクの開始時に独自のコードが実行されていない可能性があるため、それが理にかなっているのかどうかはわかりません。プログラムとタスクの間で通信する唯一の方法は、永続ストレージを使用することだと思います。

于 2013-03-07T23:31:46.097 に答える