Невозможно разрешить Scoped Service от root Provider .net Core 2C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно разрешить Scoped Service от root Provider .net Core 2

Сообщение Anonymous »

Когда я пытаюсь запустить свое приложение, я получаю ошибку < /p>

Код: Выделить всё

InvalidOperationException: Cannot resolve 'API.Domain.Data.Repositories.IEmailRepository' from root provider because it requires scoped service 'API.Domain.Data.EmailRouterContext'.
< /code>

Что странно, так это то, что эта электронная почта и интерфейс настроены точно так же, насколько я могу судить, как и все другие мои репозитории, но для них нет ошибки.  Ошибка возникает только в том случае, если я попытаюсь использовать app.useemailingExceptionHandling (); линия. Вот некоторые из моего файла startup.cs.  < /P>

public class Startup
{
public IConfiguration Configuration { get; protected set; }
private APIEnvironment _environment { get; set; }

public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Configuration = configuration;

_environment = APIEnvironment.Development;
if (env.IsProduction()) _environment = APIEnvironment.Production;
if (env.IsStaging()) _environment = APIEnvironment.Staging;
}

public void ConfigureServices(IServiceCollection services)
{
var dataConnect = new DataConnect(_environment);

services.AddDbContext(opt => opt.UseSqlServer(dataConnect.GetConnectString(Database.GeneralInfo)));
services.AddDbContext(opt => opt.UseSqlServer(dataConnect.GetConnectString(Database.EmailRouter)));

services.AddWebEncoders();
services.AddMvc();

services.AddScoped();
services.AddScoped();
services.AddScoped();
services.AddScoped();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();

app.UseAuthentication();

app.UseStatusCodePages();
app.UseEmailingExceptionHandling();

app.UseMvcWithDefaultRoute();
}
}
< /code>

Вот emailRepository < /p>

public interface IEmailRepository
{
void SendEmail(Email email);
}

public class EmailRepository : IEmailRepository, IDisposable
{
private bool disposed;
private readonly EmailRouterContext edc;

public EmailRepository(EmailRouterContext emailRouterContext)
{
edc = emailRouterContext;
}

public void SendEmail(Email email)
{
edc.EmailMessages.Add(new EmailMessages
{
DateAdded = DateTime.Now,
FromAddress = email.FromAddress,
MailFormat = email.Format,
MessageBody = email.Body,
SubjectLine = email.Subject,
ToAddress = email.ToAddress
});
edc.SaveChanges();
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

private void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
edc.Dispose();
disposed = true;
}
}
}
< /code>

и, наконец, обработка исключений < /p>

public class ExceptionHandlingMiddleware
{
private const string ErrorEmailAddress = "[email protected]";
private readonly IEmailRepository _emailRepository;

private readonly RequestDelegate _next;

public ExceptionHandlingMiddleware(RequestDelegate next, IEmailRepository emailRepository)
{
_next = next;
_emailRepository = emailRepository;
}

public async Task Invoke(HttpContext context)
{
try
{
await _next.Invoke(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex, _emailRepository);
}
}

private static Task HandleExceptionAsync(HttpContext context, Exception exception,
IEmailRepository emailRepository)
{
var code = HttpStatusCode.InternalServerError;  // 500 if unexpected

var email = new Email
{
Body = exception.Message,
FromAddress = ErrorEmailAddress,
Subject = "API Error",
ToAddress = ErrorEmailAddress
};

emailRepository.SendEmail(email);

context.Response.ContentType = "application/json";
context.Response.StatusCode = (int) code;
return context.Response.WriteAsync("An error occured.");
}
}

public static class AppErrorHandlingExtensions
{
public static IApplicationBuilder UseEmailingExceptionHandling(this IApplicationBuilder app)
{
if (app == null)
throw new ArgumentNullException(nameof(app));
return app.UseMiddleware();
}
}
Обновление:
Я нашел эту ссылку https://github.com/aspnet/dependencyinction/issues/578, которая привела меня к изменению моего файла программы. Метод BuildWebhost из этого < /p>

public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup()
.Build();
}
< /code>

к этому < /p>

public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup()
.UseDefaultServiceProvider(options =>
options.ValidateScopes = false)
.Build();
}
< /code>

Я не знаю, что именно происходит, но сейчас, кажется, работает. < /p>

Подробнее здесь: https://stackoverflow.com/questions/485 ... net-core-2
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»