我正在尝试使用身份服务来管理我的应用程序的登录名。我有以下
let configureServices (services : IServiceCollection) =
// Configure InMemory Db for sample application
services.AddDbContext<IdentityDbContext<IdentityUser>>(
fun options ->
options.UseInMemoryDatabase("NameOfDatabase") |> ignore
) |> ignore
但是它使用内存数据库。我想保留用户注册信息,并且我有postgresql设置,并希望使用该数据库来保留信息。我在settings.json文件中有connectionString信息。我想将以上功能更改为:
let configureServices (services : IServiceCollection) =
// Configure InMemory Db for sample application
services.AddDbContext<IdentityDbContext<IdentityUser>>(
fun options ->
let config = ctx.GetService<IConfiguration>()
let connString = config.Item("connectionString")
options.UseNpgsql(connString) |> ignore
) |> ignore
但是问题出在configureServices函数内部,我无权访问处理应用程序配置的Httpcontext(由ctx表示)。我该怎么做呢?基本上,我想从configureServices函数中的settings.json文件中获取connectionString字段的值。
答案 0 :(得分:3)
希望您将以下代码行添加到您的app.cofig文件中。
<connectionStrings>
<add name="DefaultConnection"
connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
</connectionStrings>
</configuration>
其中存储了数据库连接字符串。 在ConfigureServices()中,U可以访问配置对象,该对象使您可以访问来自app.config文件的应用程序连接字符串。
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
有关更多详细信息:-Click Here
答案 1 :(得分:3)
我将假定您正在使用与以下类似的功能:
WebHost
.CreateDefaultBuilder(args)
.ConfigureServices(Action<_> configureServices)
.Configure(Action<_> configureApp)
您会发现此ConfigureServices
方法的重载占用了Action<WebHostBuilderContext, IServiceCollection>
。因此,您可以将功能更改为此:
let configureServices (context:WebHostBuilderContext) (services:IServiceCollection) =
let config = context.Configuration
let connString = config.GetConnectionString "DefaultConnection"
services.AddDbContext<IdentityDbContext<IdentityUser>>(fun opts ->
opts.UseNpgsql(connString) |> ignore
) |> ignore
并将调用代码更改为此(注意Action<_>
变成Action<_,_>
):
WebHost
.CreateDefaultBuilder(args)
.ConfigureServices(Action<_,_> configureServices)
.Configure(Action<_> configureApp)
答案 2 :(得分:0)
看起来您正在使用 Startup
类,您想在其中访问 ConfigureServices(IServiceCollection services)
方法中的配置。
如果你从头开始创建这个类,它不会有一个神奇的 Configuration
对象。您需要创建一个将被注入的构造函数,然后在某处存储对它的引用。默认情况下,it is done like this:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
}
现在您可以在您的 Configuration
和类的其他方法中按预期使用 ConfigureServices
属性:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContextFactory<IdentityDbContext<IdentityUser>>(options =>
options.UseInMemoryDatabase(
Configuration.GetConnectionString("MyConnectionStringKey")));
}