小编fos*_*bie的帖子

使用工厂模式与ASP.NET核心依赖注入

我需要ASP.Net Core依赖注入将一些参数传递给我的GlobalRepository类的构造函数,该类实现ICardPaymentRepository接口.

参数用于配置,来自配置文件和数据库,我不希望我的类去引用数据库和配置本身.

我认为工厂模式是最好的方法,但我无法找出使用工厂类的最佳方法,工厂类本身依赖于配置和数据库.

我的创业公司目前看起来像这样

public class Startup
{
    public IConfiguration _configuration { get; }
    public IHostingEnvironment _environment { get; }

    public Startup(IConfiguration configuration, IHostingEnvironment environment)
    {
        _configuration = configuration;
        _environment = environment;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IDbRepository, DbRepository>();
        var connection = _configuration.GetConnectionString("DbConnection");
        services.Configure<ConnectionStrings>(_configuration.GetSection("ConnectionStrings"));
        services.AddDbContext<DbContext>(options => options.UseSqlServer(connection));
        services.AddScoped<ICardPaymentRepository, GlobalRepository>();
        ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IRFDbRepository rFDbRepository)
    {
     ...
    }
}
Run Code Online (Sandbox Code Playgroud)

GlobalRepository构造函数如下所示:

public GlobalRepository(string mode, string apiKey)
{
}
Run Code Online (Sandbox Code Playgroud)

我现在如何将模式从配置和apiKey从DbRepository传递到Startup的构造函数中?

c# dependency-injection .net-core asp.net-core

8
推荐指数
3
解决办法
7205
查看次数

如何在 ASP.NET Core 上使用 Identity 登录后立即获取用户详细信息?

我正在使用 ASP.NET Core Identity 在我的网站上进行身份验证,并且我试图在用户登录后立即将用户 ID 记录到数据库中,但我似乎无法使用以下代码访问它们。此处返回GetResult()null,但如果它在下一页上,则它可以正常工作,但只是不在OnPostAsync它需要的方法中。 Input.UserIDOrLogonName不包含用户 ID。

private readonly SignInManager<User> _signInManager;
private readonly UserManager<User> _userManager;

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl = returnUrl ?? Url.Content("~/");
    if (ModelState.IsValid)
    {
        var result = await _signInManager.PasswordSignInAsync(Input.UserIDOrLogonName, Input.Password, Input.RememberMe, lockoutOnFailure: true);
        if (result.Succeeded)
        {
            var userId = _userManager.GetUserAsync(HttpContext.User)
                         .GetAwaiter().GetResult().UserId;
            _audit.RecordAction(AuditType.LoginSuccess, userId);
            return LocalRedirect(returnUrl);
        }
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以访问 User 实例吗?

c# asp.net-core asp.net-core-identity

5
推荐指数
1
解决办法
3935
查看次数

更新同版本号的Nuget包

我正在开发一个 .net 标准 C# 类库,每当我构建它时都会自动输出一个 NuGet 包。我正在使用这个带有 ASP.NET Core 应用程序的 NuGet 包。如果我在每次构建类库时更新它的版本号,我可以使用一个简单的 Update-Package 命令将更改拉入我的应用程序,但我不想每次都更改版本号,当我正在做很多小的改变。

我尝试清除 Visual Studio 选项菜单中的 NuGet 缓存,然后尝试使用“dotnet restore”以及卸载/重新安装,但不知何故,它似​​乎仍然从某个地方继续拉入旧版本。

有没有其他方法可以做到这一点?它会从哪里提取旧版本?

.net nuget nuget-package asp.net-core .net-standard

5
推荐指数
2
解决办法
3451
查看次数

会话注销过早

我将 ASP.NET Core 2.1 与 Microsoft Identity 一起使用,并且用户抱怨他们在仅大约 30 分钟不活动后就一直被重定向到登录屏幕。我在 ExpireTimeSpan 中设置了 60 分钟,但它永远不会持续那么长时间。有什么建议?

这是我在 Startup.cs 文件中的内容:

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IRFDbRepository, RFDbRepository>();
    var connection = _configuration.GetConnectionString("RFDbConnection");
    services.Configure<ConnectionStrings>(_configuration.GetSection("ConnectionStrings"));
    services.AddDbContext<IdentityDbContext>(options => options.UseSqlServer(connection));
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddRazorPagesOptions(options =>
    {
        options.AllowAreas = true;
        options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
    });

    services.AddIdentity<User, UserRole>().AddDefaultTokenProviders();
    services.AddTransient<IUserStore<User>, UserStore>();
    services.AddTransient<IRoleStore<UserRole>, RoleStore>();

    services.ConfigureApplicationCookie(options =>
    {
        options.LoginPath = "/Identity/Account/Login";
        options.LogoutPath = "/Identity/Account/Logout";
        options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
        options.SlidingExpiration = true;
    });
}
Run Code Online (Sandbox Code Playgroud)
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IRFDbRepository rFDbRepository)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-identity asp.net-core

4
推荐指数
1
解决办法
1167
查看次数

单击关闭按钮时如何停止激活角度反应表单验证

我在模式弹出窗口中有一个反应式表单,但是当我第一次打开模式时,必填字段具有焦点。当我单击关闭按钮时,会触发验证(我认为是通过失去焦点),并显示所需的字段验证消息,但按钮不会单击即。按钮后面的代码不运行。如果你再次点击它,一切都会正常。

这些是 TS 文件的相关位:

  ngOnInit() {
    this.addPaymentForm = this.formBuilder.group({
      jobId: ['', [Validators.required, Validators.maxLength(9)]],
      grossAmount:  ['', [Validators.required, Validators.max(10000), Validators.min(-10000)]]
    });
  }

  get f() { return this.addPaymentForm.controls; }

  close() {
    this.activeModal.close({ dataModified: false });
  }
Run Code Online (Sandbox Code Playgroud)

这是 HTML:

<form [formGroup]="addPaymentForm" (ngSubmit)="submit()">
    <label for="jobId">Job Id</label>
    <input type="number" id="jobId" class="form-control" formControlName="jobId" required>
    <div *ngIf="f.jobId.invalid && (f.jobId.dirty || f.jobId.touched)" class="alert alert-danger mt-2">
        <div *ngIf="f.jobId.errors.required">
            Job Id is required
        </div>
        <div *ngIf="f.jobId.errors.maxlength">
            Invalid Job Id
        </div>
    </div>

    <label for="grossAmount">Gross Amount</label>
    <input id="grossAmount" type="number" class="form-control" formControlName="grossAmount" required>
    <div …
Run Code Online (Sandbox Code Playgroud)

angular angular-reactive-forms

2
推荐指数
1
解决办法
4096
查看次数

如果值为0而没有CASE语句,则返回1

我正在尝试找到一种更简洁的方法来执行以下查询,以便我不会复制我的代码.

SELECT CASE WHEN <COMPLICATED CODE THAT RETURNS A SINGLE INT> = 0
THEN 1
ELSE <COMPLICATED CODE THAT RETURNS A SINGLE INT> END
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望使用现有函数而不是创建自己的函数:

SELECT ISVALUE(COMPLICATED CODE THAT RETURNS A SINGLE INT,0,1)
Run Code Online (Sandbox Code Playgroud)

sql sql-server

1
推荐指数
1
解决办法
121
查看次数