Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我似乎不能在WinRT BackgroundTask中使用依赖项注入_C#_Dependency Injection_Background_Windows Runtime - Fatal编程技术网

C# 我似乎不能在WinRT BackgroundTask中使用依赖项注入

C# 我似乎不能在WinRT BackgroundTask中使用依赖项注入,c#,dependency-injection,background,windows-runtime,C#,Dependency Injection,Background,Windows Runtime,我正在Windows运行时组件中实现IBackgroundTask,我想向其中注入一个记录器依赖项,但应用程序在调用后台任务时退出。它甚至不会进入构造函数。我将Ninject用作DI容器,在应用程序的其他任何地方使用它都没有问题 我想这样做: private readonly ILog _logger; public BackroundTask(ILog logger) { _logger = logger; } public async void Run(IBackgrou

我正在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方法。

在我创建Windows应用商店应用程序的有限经验中,您必须为后台任务提供默认构造函数;不会调用任何其他构造函数


不过,希望我在这一点上是错的;能够传入后台任务的依赖项是很实际的,但我不确定这是否有意义,因为任务启动时您自己的代码甚至可能没有运行。我认为在程序和任务之间进行通信的唯一方法是使用永久存储器。

ILOG必须编译以支持WinRT。错误到底是什么?请注意,除事件处理程序外,通常应避免使用
async void
。你可能有一个有效的理由来做这件事,但是如果你不这么做的话,我要考虑的是,我使用一个异步调用把数据转发回服务器,然后我需要记录POST的成功或失败。ILOG被编译成一个Windows运行时组件。事件日志中的错误是:激活应用程序a.Winrt.Ui_tjekt9a7fmk0j!Windows.BackgroundTasks合约的应用程序失败,错误:未实现