目前,我正在建立一个有 2 层的网站。
- Web UI:这是一个 MVC 4 项目,用于与用户交互
- 数据访问:这是一个 C# 库。该层负责与数据库交互。
我正在使用 Ninject 进行依赖注入。到目前为止,一切正常。但是现在,我想在 Web UI 和 Data Access 之间插入一个新层,称为业务逻辑。所以架构将是:
- Web UI:使用来自业务逻辑的界面。
- 业务逻辑:使用来自数据访问的接口。
- 数据访问:保持不变。
我的问题是,我应该如何在 Web UI 和业务逻辑中配置我的 Ninject 以实现我想要的?这是我此时的源代码:
数据访问层:
接口 IHotelRepository.cs
public interface IHotelRepository
{
IQueryable<Hotel> Hotels { get; }
}
具体类 HotelRepository.cs
public class HotelRepository : IHotelRepository
{
private HotelDbEntities context = new HotelDbEntities();
public IQueryable<Hotel> Hotels { get { return context.Hotels; } }
}
网页界面层:
NinjectControllerFactory.cs
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController) ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
ninjectKernel.Bind<IHotelRepository>().To<HotelRepository>();
}
}
全球.asax.cs
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);
AuthConfig.RegisterAuth();
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
}
酒店控制器.cs
public class HotelController : Controller
{
private IHotelRepository hotelRepository;
public HotelController(IHotelRepository repository)
{
hotelRepository = repository;
}
public ActionResult List()
{
return View(hotelRepository.Hotels);
}
}
谢谢你的帮助。