gpt4 book ai didi

c# - 我可以在 DbContext 的 ViewModel 中使用依赖注入(inject)吗?核心2.0

转载 作者:行者123 更新时间:2023-12-03 10:33:17 25 4
gpt4 key购买 nike

我正在尝试将应用程序从框架项目迁移到 Core 2.0。我遇到的问题与 this one 非常相似,但我正在尝试使用 DI。我根据该问题创建了一个示例项目,但使用的 View 模型类似于我在项目中使用它的方式。我一直在试图弄清楚我在一天多的时间里做错了什么,所以希望这里有人可以提供帮助。

In case It's helpful code on github

在做了一些研究之后,我根据这篇文章中的评论改变了我的应用程序使用我的 View 模型的方式,并开始使用存储库模式。我更新了 git hub 示例以反射(reflect)我的更改,以防它对任何人有所帮助。

ApplicationDbContext.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Gig> Gigs { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}

protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}

public DbSet<gigs2.Models.Gig> Gig { get; set; }
}

GigsController.cs
public class GigsController : Controller
{
// GET: Gigs
public ActionResult Index()
{
GigsViewModel vm = new GigsViewModel();
vm.Get();
return View(vm);
}
}

我在它说的 new GigsViewModel(); 上出错了,因为我需要将选项传递给 ApplicationDbContext

There is no argument given that corresponds to the required formal parameter 'options' of 'ApplicationDbContext.ApplicationDbContext(DbContextOptions)'



GigsViewModels.cs
 public class GigsViewModel
{
private ApplicationDbContext _context;

public GigsViewModel(ApplicationDbContext context) {
_context = context;

}
public List<GigViewModel> Gigs { get; set; }

public void Get()
{
Gigs = _context.Gigs.Select(g => new GigViewModel {
Id = g.Id,
Date = g.Date,
Time = g.Time,
Venue = g.Venue
}).ToList();
}
}

启动.cs
    public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-/=?^_`{|}~.@ ";
options.User.RequireUniqueEmail = false;
options.Password.RequireDigit = false;
options.Password.RequiredLength = 4;
options.Password.RequireDigit = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequireLowercase = false;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddScoped<UserManager<ApplicationUser>, ApplicationUserManager>();
services.AddScoped<SignInManager<ApplicationUser>, ApplicationSignInManager<ApplicationUser>>();
services.Configure<Configuration.cofAuthSettings>(Configuration.GetSection("cofAuthSettings"));


// Add application services.
services.AddTransient<IEmailSender, EmailSender>();

services.AddMvc();
}

最佳答案

将构造函数添加到您的 GigsController接受你的 GigsViewModel 实例的类.这将允许 IoC 容器构建依赖关系树(而不是像现在这样自己创建它。

像这样的东西应该工作:

private readonly GigsViewModel _gigsViewModel;

public GigsController(GigsViewModel gigsViewModel)
{
_gigsViewModel = gigsViewModel;
}

// GET: Gigs
public ActionResult Index()
{
_gigsViewModel.Get();
return View(_gigsViewModel);
}

关于c# - 我可以在 DbContext 的 ViewModel 中使用依赖注入(inject)吗?核心2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45775740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com