Как сохранить данные в ядре Asp .net с помощью метода, вызываемого в Startup.cs? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть метод, который вызывается в 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...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...