/// <summary>
        /// Reports the given issue to the current active backend.
        /// Certain properties such as the environment and stacktrace are being resolved automatically,
        /// if you leave them blank/null.
        /// 
        /// </summary>
        /// <param name="report">The issue report which will be sent to the backend.</param>
        /// <exception cref="ReportSendException">Thrown when there was a problem sending the report to the backend.</exception>
        public async Task ReportIssueAsync(IssueReport report)
        {
            if(string.IsNullOrEmpty(ActiveBackend))throw new ReportSendException("You have to set an active report backend first before using the report method!");

            await PrepareIssueReportAsync(report);

            if (_reportBackends.ContainsKey(ActiveBackend))
            {
                var backend = _reportBackends[ActiveBackend];
                try
                {
                    await backend.SendIssueReportAsync(report);
                }
                catch (Exception e)
                {
                    throw new ReportSendException("Failed to send issue report using provider " + backend.GetType().Name, e);
                }
            }
            else
            {
                throw new ReportSendException(string.Format("No report backend found with id '{0}'", ActiveBackend));
            }
        }
        protected async virtual Task PrepareIssueReportAsync(IssueReport report)
        {
            if (report.Environment == null)
            {
                report.Environment = ResolveCurrentEnvironmentDetail();
            }

            if (report.Stacktrace == null)
            {
                report.Stacktrace = await ResolveCurrentStacktraceAsync();
            }
        }