[转载]使用ASP.NET MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore(一) – 王志岳 – 博客园
- ASP.NET MVC
- 2013-06-19
- 82热度
- 0评论
[转载]使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore(一) - 王志岳 - 博客园.

| 工程名 | VS工程模板 | 目的 |
| SportsStore.Domain | Class Library | 域Entities和logic;
使用Entity Framework 创建一个repository,并将其设置为一个持久层。 |
| SportsStore.WebUI | ASP.NET MVC 4 Web Application | controllers and views |
| SportsStore.UnitTests | Unit Test Project | unit tests |

| 工程名 | 工具依赖 | 工程依赖 | 微软引用 |
| SportsStore.Domain | Entity Framework | None | System.Web.Mvc
System.ComponentModel .DataAnnotations |
| SportsStore.WebUI | Ninject
Moq |
SportsStore.Domain
|
None |
| SportsStore.UnitTests | Ninject
Moq |
SportsStore.Domain
SportsStore.WebUI |
System.Web.Mvc
System.Web Microsoft.CSharp |
[csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using SportsStore.Domain.Abstract;
using SportsStore.Domain.Entities;
using Moq;
using Ninject;
using SportsStore.Domain.Concrete;
namespace SportsStore.WebUI.Infrastructure
{
public class NinjectControllerFactory: DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory() {
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(RequestContext
requestContext, Type controllerType) {
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings() {
//put bindings here
}
}
}
[/csharp]
我们现在还没有添加任何绑定,但是,当我们需要时,能使用 AddBindings 方法去添加. 现在,我们需要去
[csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using SportsStore.WebUI.Infrastructure;
namespace SportsStore.WebUI
{
// 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
// 请访问 http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//Added by wangzhiyue
//We need to tell MVC that we want to use the NinjectController
//class to create controller objects
ControllerBuilder.Current.SetControllerFactory(new
NinjectControllerFactory());
//Added end
AuthConfig.RegisterAuth();
}
}
}
[/csharp]
启动域模块
[csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SportsStore.Domain.Entities
{
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
}
}
[/csharp]
注意这个public关键字,因为我们将域模型分离为独立的工程,所以将访问关键字定义为public,你可以不
这么做,但这样做有助于模块的分离,使项目层次鲜明、简洁。
如果你觉得从我的文章中学到了知识,那么请继续关注我续篇!
王志岳 塔塔信息技术(中国)股份有限公司 | 开发者导航