如何在我的IdentityDBContext中获取配置选项?

时间:2018-04-17 14:59:52

标签: c# asp.net-core

当我尝试仅使用默认构造函数离开我的db上下文但是传入Startup.cs中的连接字符串时,我得到一个错误' AddDbContext被调用了配置,但是上下文类型' ApplicationDbContext& #39;只声明一个无参数构造函数'。但是,如果我尝试通过以下方式在DbContext内部构建它:

        private readonly IConfiguration _configuration;

        public ApplicationDbContext([FromServices]IConfiguration configuration)
        {
            _configuration = configuration;
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(_configuration["ConnectionString"]);
        }

使用时会出现投诉"无法创建类型' ApplicationDbContext'的实例。模型绑定的复杂类型不能是抽象或值类型,并且必须具有无参数构造函数"。如果同时拥有两个构造函数,我在尝试访问_configuration时不出所料地得到一个空引用异常。我觉得这是一个很常见的情况,所以我必须遗漏一些明显的东西。

修改

在startup.cs中,我就是这样添加DbContext(在ConfigureServices中):

services.AddDbContext<ApplicationDbContext>(/*options => options.UseSqlServer(Configuration["ConnectionString"])*/);

此外,该课程在ConfigureServices

中的另一个地方使用
services.AddIdentity<IdentityUser, IdentityRole>( options =>
            {...})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

1 个答案:

答案 0 :(得分:0)

您可以按如下方式定义单个构造函数:

 config.action_mailer.delivery_method = :smtp

 config.action_mailer.smtp_settings = {
  address:              'smtp.office365.com',
  port:                 587,
  domain:               'mydomain.com',
  authentication:       :login,
  enable_starttls_auto: true,
  user_name:            'myname@mydomain.com',
  password:             'password'
}

两个论点都应该注入。