????ASP.NET Core 1.0 ?? ASP.NET ????????±?д??????????????????????????黯????????????????????????????????????????????????????????????????????????? ASP.NET Core ???????????????????????????????????????????????????黯?????? ASP.NET MVC??ASP.NET ??????????????????????д?????????????????????????????????壬????????????????С?
???????????
??????????????????????????????????????ι??? ASP.NET MVC???汾 3 ?? 5??????????????ó?????????????????????????? NerdDinner MVC 4 ????? DinnersController ????
private NerdDinnerContext db = new NerdDinnerContext();
private const int PageSize = 25;
public ActionResult Index(int? page)
{
int pageIndex = page ?? 1;
var dinners = db.Dinners
.Where(d => d.EventDate >= DateTime.Now).OrderBy(d => d.EventDate);
return View(dinners.ToPagedList(pageIndex?? PageSize));
}
?????????????????????????????? NerdDinnerContext ?????????????????????????????????????????????????????????????ó?????????????κε?????????????????ó?????????Щ??????????棬???????????????????????????д?????????в????
?????????????Υ??????????? (DRY) ?????????????κ?????????????????????о???????????????? Entity Framework (EF) ???????????????δ????????????????????????????????????????????ó???????????
????????????????????????????????仰“?1?????????”?? ???????????“??”??????????????κε???????????????????????????????????????????????????? (bit.ly/DI-Principle) ????? “???????????????????????????????????” ???????У?????????ν??????????????????????????????????????λ??????????? EF????????????
?????????1??????“ī????”?????????????????????????ó????????????в???????????????????У???м???????????????????????????????????? DateTime.Now ????á????????????????????????????Щ??????????? Dinners??????? EventDate ?????????????????????y??????á??ж??????????????????????????????м?????????÷??? Dinners ???κ??3??????????????????????????????????????
????????????????????????????????????????? DateTime ???????????? Dinners?????????????? DateTime.Now?????????????????????????ó?????????????????ó????????? DateTime.Now?????????????????????????????????????Щ Dinners ????????????????У??????????????? DateTimeOffset ??????????????????????
???????
????????????????????????????????????????????Э????????????????????д??????Ч??????????????????Щ???????????????????????????????????????????ж??????乹??????????????????????? (bit.ly/ED-Principle) ??????“?????????????????????????????κ?Э??????”
????DinnersController ??????????????????????ζ??????ò?????κ?Э??????????????????????????????????????????? ?????????? MVC ?????????????ó??????д????????????????Щ??????
????var controller = new DinnersController();
????var result = controller.Index(1);
??????????????£???????е??????????????????? EF ??????????????? InvalidOperationException?? “??ó????????????????????‘NerdDinnerContext’?????????????” ??????? ??????????乹???????????????????????????????? ?????????????? Dinner ????????????????????乹??????????????????????????????????
??????????????
?????????????? (DI) ???y?????????????????????????????????????????????μ??????????Щ???????????????? .NET ????????????????????????????ü????????????????ó?????????ASP.NET ??????汾??????? DI?????? ASP.NET MVC ?? Web API ????? DI ??????????????Щ???????????????????????????????????????????????????????????????????????? ASP.NET Core 1.0??DI ????????????????????????????á?
????ASP.NET Core ??????? DI????????????? DI ????—?????????? (IoC) ?????????????? ASP.NET Core ?????? Startup ??? ConfigureServices ?????е?????????????????????????????????????????????????????????滻???????????????EF Core ?????? DI ???????????????? ASP.NET Core ??ó????????? DI ??????????????????????????????? NerdDinner ????????? GeekDinner?????? EF Core???????????
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<GeekDinnerDbContext>(options =>
options.UseSqlServer(ConnectionString));
services.AddMvc();
}
???????úú??????????????? DI ?????? DinnersController ????????????? GeekDinnerDbContext ???????
public class DinnersController : Controller
{
private readonly GeekDinnerDbContext _dbContext;
public DinnersController(GeekDinnerDbContext dbContext)
{
_dbContext = dbContext;
}
public IActionResult Index()
{
return View(_dbContext.Dinners.ToList());
}
}