У меня есть метод, который вызывается в Startup.cs , в этом методе есть событие, после того как событие сработало, оно должно сохранить данные в моей базе данных, как показано ниже
public void SaveRecievedSmsToDb(string phoneNumber, string messageBody,
DateTime messageDateTime, string state)
{
ContactService contactService = new ContactService(_context, _httpContextAccessor);
MessageService messageService = new MessageService(_context, _httpContextAccessor);
var contact = contactService.GetContactByNr(phoneNumber);
var currentUserId = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
var newMessage = new Message();
{
newMessage.UserId = currentUserId;
newMessage.ContactId = contact.ContactId;
newMessage.Body = messageBody;
newMessage.Date = messageDateTime;
newMessage.isDelivered = true;
newMessage.State = state;
messageService.AddMessage(newMessage);
}
Проблема в том, что для этого способа требуются службы, использующие DbContext и HttpContextAccessor , и в конце мне нужно записать их в Startup.cs в качестве инъекциичто не работает и выбрасывает InvalidOperationException: Unable to resolve service for type 'SmsSender.Data.ApplicationDbContext' while attempting to activate 'SmsSender.Startup'.
Какой будет лучший способ сохранить эти данные из события?
public class Startup
{
private IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
AtSmsReceiver _atSmsReceiver = new AtSmsReceiver();//If I'm trying to use Http and AppDb contexts it asking to pass them here
//Opens port for runtime
COMPortSettings.OpenPort();
//Runtime sms receiver
_atSmsReceiver.ReceiveSms();
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlite(_configuration.GetConnectionString("SmsSender")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add application services.
services.AddScoped<IContactService, ContactService>();
services.AddScoped<IMessageService, MessageService>();
services.AddTransient<IEmailSender, EmailSender>();
services.AddTransient<IMacroService, MacroService>();
services.AddTransient<IHttpContextAccessor, HttpContextAccessor>();
services.AddMvc();
}
//All other logic...
}