在 Configure 方法中使用 DependencyInjection
using DependencyInjection in the Configure Method
在 ASP.NET CORE 网络应用程序中,我有一个 MyRepository
class 和一个管理对存储库(数据库)的访问的接口 IMyRepository
。
每次用户连接到应用程序(在站点上)时,我都需要在数据库中记录一个条目。
在Startup.cs中,在我做的ConfigureServices
方法中
public void ConfigureServices(IServiceCollection services)
{
// Adds services required for using options.
services.AddOptions();
// ...
services.AddSingleton<IMyRepository, MyRepository>();
然后在Configure
方法中我需要更新数据库
public void Configure(IApplicationBuilder app,
IHostingEnvironment env, ILoggerFactory loggerFactory) {
// ...
IMyRepository myRep = ??? // should inject somehow
// ...
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
ClientId = Configuration["...ClientId"],
Authority = Configuration["...AADInstance"] + Configuration["...TenantId"],
CallbackPath = Configuration["...CallbackPath"],
Events = new OpenIdConnectEvents
{
OnTicketReceived = context =>
{
var user = (ClaimsIdentity)context.Ticket.Principal.Identity;
if (user.IsAuthenticated)
{
var firstName = user.FindFirst(ClaimTypes.GivenName).Value;
var lastName = user.FindFirst(ClaimTypes.Surname).Value;
var email = user.FindFirst(ClaimTypes.Email).Value;
var connectedOn = DateTime.UtcNow;
var userId = user.Name;
//
// HERE ADD the info in the DB via IMyRepository
//
myRep.AddUserInfo(userId, firstName, lastName, email, connectedOn);
}
return Task.FromResult(0);
}
}
});
// ...
}
所以我的问题是 how/where 我是否注入 IMyRepository
以便在 Configure
方法中使用它?
修改你的Configure
方法,增加一个参数IMyRepository myRep
,只要你在ConfigureServices
.
中注册,它就会为你注入
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
IMyRepository myRep) { ... }
在 ASP.NET CORE 网络应用程序中,我有一个 MyRepository
class 和一个管理对存储库(数据库)的访问的接口 IMyRepository
。
每次用户连接到应用程序(在站点上)时,我都需要在数据库中记录一个条目。
在Startup.cs中,在我做的ConfigureServices
方法中
public void ConfigureServices(IServiceCollection services)
{
// Adds services required for using options.
services.AddOptions();
// ...
services.AddSingleton<IMyRepository, MyRepository>();
然后在Configure
方法中我需要更新数据库
public void Configure(IApplicationBuilder app,
IHostingEnvironment env, ILoggerFactory loggerFactory) {
// ...
IMyRepository myRep = ??? // should inject somehow
// ...
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
ClientId = Configuration["...ClientId"],
Authority = Configuration["...AADInstance"] + Configuration["...TenantId"],
CallbackPath = Configuration["...CallbackPath"],
Events = new OpenIdConnectEvents
{
OnTicketReceived = context =>
{
var user = (ClaimsIdentity)context.Ticket.Principal.Identity;
if (user.IsAuthenticated)
{
var firstName = user.FindFirst(ClaimTypes.GivenName).Value;
var lastName = user.FindFirst(ClaimTypes.Surname).Value;
var email = user.FindFirst(ClaimTypes.Email).Value;
var connectedOn = DateTime.UtcNow;
var userId = user.Name;
//
// HERE ADD the info in the DB via IMyRepository
//
myRep.AddUserInfo(userId, firstName, lastName, email, connectedOn);
}
return Task.FromResult(0);
}
}
});
// ...
}
所以我的问题是 how/where 我是否注入 IMyRepository
以便在 Configure
方法中使用它?
修改你的Configure
方法,增加一个参数IMyRepository myRep
,只要你在ConfigureServices
.
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
IMyRepository myRep) { ... }