???????????????ASP.NET Core?б?д???????
???????????? ???????[ 2016/5/23 13:24:10 ] ??????????????????? .NET
?????????????1????????????????????????????????????????乹???????????? ASP.NET DI ??????????????????????????д??ó???????????贛??????乹???????????????????????????漰?????
??????????????????????????????????????????????????????滻?????????????????????????????????????????????????????????????????????????????????? GeekDinnerDbContext ?????????? DbContext ?????Щ???????????????????????????????????ó????????
????var optionsBuilder = new DbContextOptionsBuilder();
????optionsBuilder.UseSqlServer(Startup.ConnectionString);
????var dbContext = new GeekDinnerDbContext(optionsBuilder.Options);
????var controller = new DinnersController(dbContext);
????var result = (ViewResult) controller.Index();
???????? EF Core DbContext ???漰??????????? EF6 DbContext ??????Щ?????????????????????????????????? ASP.NET Core ?????EF Core ???????????黯?????????£????????????? DbContextOptionsBuilder??????????????????????? AddEntityFramework ?? AddSqlServer?????? EF ??????????????
???????????????в????
????????????????ó????????—??????????????ó?????????????????в?????????????????????ν??и??????????в???????????????????????????????ó?????????????????????е????????????????????????ASP.NET Core ?? EF Core ??????????в????
????????????????????????????????洢?? DbContext ???????????????д???????????????? DbContextOptions ?????????? GeekDinnerDbContext????????乹??????????????????????????????
var optionsBuilder = new DbContextOptionsBuilder<GeekDinnerDbContext>();
optionsBuilder.UseInMemoryDatabase();
_dbContext = new GeekDinnerDbContext(optionsBuilder.Options);
// Add sample data
_dbContext.Dinners.Add(new Dinner() { Title = "Title 1" });
_dbContext.Dinners.Add(new Dinner() { Title = "Title 2" });
_dbContext.Dinners.Add(new Dinner() { Title = "Title 3" });
_dbContext.SaveChanges();
???????????????н??????????ú??????????д?????????????????????????? ViewResult ??????У?
????[Fact]
????public void ReturnsDinnersInViewModel()
????{
????var controller = new OriginalDinnersController(_dbContext);
????var result = controller.Index();
????var viewResult = Assert.IsType<ViewResult>(result);
????var viewModel = Assert.IsType<IEnumerable<Dinner>>(
????viewResult.ViewData.Model).ToList();
????Assert.Equal(1?? viewModel.Count(d => d.Title == "Title 1"));
????Assert.Equal(3?? viewModel.Count);
????}
???????????????д?????????????????????????????????????????????????????粵???????м??????????????????????????????????????????в????????????????и??????????????????? EF Core ?????????????????????????????????????????????????е? EF????????????????????????????????? UI ????—????????Υ?????????????????????????
???????????????????????
???????????? (bit.ly/LS-Principle) ????????????????????????????????????? DI ???? DinnersController ??????????????????? DbContext????????y??????蹦?????????????????????????? EF ?С?
???????????????????????????????????? ??????????? DbContext?????????????????????????? Dinners ????????????????????????????? Dinner ???????????????? .NET ????? IEnumerable<Dinner>?????????????????????y??????? IEnumerable<Dinner>???????? Index ?????????????????
????public interface IDinnerRepository
????{
????IEnumerable<Dinner> List();
????}
?????????????洢???????????????? ???????????????????????????????????Щ?????????洢?????????????????????? IGetDinners ?? IDinnerService ?????κ???????????????????????????齫???? ICanHasDinner??????????????????????????????????????????á?
??????????????????????? DinnersController ?????? IDinnerRepository ????????????????????? GeekDinnerDbContext???????? List ????????????????
Dinners DbSet??
private readonly IDinnerRepository _dinnerRepository;
public DinnersController(IDinnerRepository dinnerRepository)
{
_dinnerRepository = dinnerRepository;
}
public IActionResult Index()
{
return View(_dinnerRepository.List());
}
?????????????????????????? Web ??ó?????????????? /Dinners ??????????? Invalid-OperationException?? ???????? GeekDinner.Controllers.DinnersController ??????????????“Geek-Dinner.Core.Interfaces.IdinnerRepository”?????
????????δ???????????????????????????????????? DI ???? IDinnerRepository ???????????????????????????
public class DinnerRepository : IDinnerRepository
{
private readonly GeekDinnerDbContext _dbContext;
public DinnerRepository(GeekDinnerDbContext dbContext)
{
_dbContext = dbContext;
}
public IEnumerable<Dinner> List()
{
return _dbContext.Dinners;
}
}
????????????????????????洢????????? EF?????????????? EF??????貼???????????????????????????ó???????????????????????ó???????????????????????????????
??????????????? IDinnerRepository ??? ASP.NET Core ?????????????????????????′???????????????? ConfigureServices ???????β??
????services.AddScoped<IDinnerRepository?? DinnerRepository>();
???????????? ASP.NET Core DI ???????????????????? IDinnerRepository ????????????? DinnerRepository ?????????????ζ?????????????? ASP.NET ???????? Web ?????????????????????????????????????????£?????????????????? DinnerRepository ????????????????????????? DbContext?????????????????????????
????????? ?????????????????????????á?
?????????? ?????????????? HTTP ?????н??е??????????????????????????? HTTP ???????????????к????????
????????? ????????????????Σ??????????????к?????????á?
?????????????????????????????????????????????????????????????????????????????????????????????????????????κ?????????????????? lambda ?????????????????????????????????????? ConfigureServices ?????????????????
?????????????????????????ó?????????????????С????????? 1 ?????????????????????3?????? IDinner-Repository ????????????????????в?????????????????????????????? EF??
????? 1 ??? Mock ??????? DinnersController
public class DinnersControllerIndex
{
private List<Dinner> GetTestDinnerCollection()
{
return new List<Dinner>()
{
new Dinner() {Title = "Test Dinner 1" }??
new Dinner() {Title = "Test Dinner 2" }??
};
}
[Fact]
public void ReturnsDinnersInViewModel()
{
var mockRepository = new Mock<IDinnerRepository>();
mockRepository.Setup(r =>
r.List()).Returns(GetTestDinnerCollection());
var controller = new DinnersController(mockRepository.Object?? null);
var result = controller.Index();
var viewResult = Assert.IsType<ViewResult>(result);
var viewModel = Assert.IsType<IEnumerable<Dinner>>(
viewResult.ViewData.Model).ToList();
Assert.Equal("Test Dinner 1"?? viewModel.First().Title);
Assert.Equal(2?? viewModel.Count);
}
}
???????? Dinner ??????б?????δ??????????????????С????????д????????????????????????Azure ??洢?? XML ???????????????????????????С?????????????У????????к??????????????????????…
????????????????????
?????????????????????????κ???????????—???????????????????????????????????????????????????????????????????????????????????????????????????????????Щ??????????? GeekDinner ??????????????? API???????κ?????? dinner ?? RSVP??
?????????dinner ????п??????????????? RSVP ?????????????????????????????? RSVP ?????????????????????С???dinner ?????????????儷?????????? RSVP ??????????????????????????? RSVP??
??????????????????????????????У????????????????????е?????????Σ??????? UI ????????? UI ?????????????????????????????????????????Ч????????????????????????????????????????????????????????????????????
?????????????????λ??λ????ó??????????У???????????????????????????????? UI????Dinner ??????????????????? RSVP ??????????????????? dinner ?洢????????????????????????? RSVP?????????????????????? RSVP ???????????????????????????????????????????
????????????? DateTime.Now???????????????????????????????????????????????????????? IDateTime ??????????? Dinner ??塣??????????????飬??? Dinner ????????????????????????????????????? EF ?? O/RM ???????Щ????????????????????????????????????????????y??????????EF ??????????????????????????????????????????
?????????????????????????? Dinner ???????????????????????????????????????????????? DinnerService ?? RsvpService???С?????????????????????? (bit.ly/anemic-model)?????????????????к???????????????????????????????????????£????????????—??????????????????????????????????????
????????????????? RSVP ?????????????????? 2?????ж???????????????????????У???Щ???????????????????????????
???????????????????????漰???????????????????SPASVOС??(021-61079698-8054)?????????????????????????
??????
?????????????????(java .net ?????).Net?й???????????Asp.net MVC??ζ???????????????????????Trim????Asp.Net WebForm????????????.Net??????????С????asp.net ???????????.Net??????????????????Linux???Jexus?й?Asp.Net Core??ó???asp.net??????????????ASP.NET???????JSON?????????????????? .NET ?? Java ???? IT ???.Net??Ч???????????????ù???ASP.NET MVC???????????Щ?£?.NET???????????????????????.net???????????????Asp.net Core MVC?????Session
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11????????
?????????App Bug???????????????????????Jmeter?????????QC??????APP????????????????app?????е????????jenkins+testng+ant+webdriver??????????????JMeter????HTTP???????Selenium 2.0 WebDriver ??????