gpt4 book ai didi

c# - 在 MVC 4 中为 3 层架构配置 Ninject

转载 作者:行者123 更新时间:2023-11-30 20:55:56 28 4
gpt4 key购买 nike

目前,我正在构建一个 2 层的网站。

  • Web UI:这是一个 MVC 4 项目,用于与用户交互
  • 数据访问:这是一个 C# 库。该层负责与数据库交互。

我正在使用 Ninject 进行依赖注入(inject)。到目前为止,还可以。但是现在,我想在 Web UI 和数据访问之间插入一个新层,称为业务逻辑。所以架构将是:

  • 网络用户界面:使用来自业务逻辑的界面。
  • 业务逻辑:使用数据访问接口(interface)。
  • 数据访问:保持不变。

我的问题是,我应该如何在 Web UI 和业务逻辑中配置我的 Ninject 来实现我想要的?这是我此时的源代码:

数据访问层:

接口(interface) 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; } }
}

Web UI 层:

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>();
}
}

Global.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());
}
}

HotelController.cs

public class HotelController : Controller
{
private IHotelRepository hotelRepository;

public HotelController(IHotelRepository repository)
{
hotelRepository = repository;
}

public ActionResult List()
{
return View(hotelRepository.Hotels);
}

}

感谢您的帮助。

最佳答案

不确定是否理解您的问题,但我认为您不必在业务层中配置 Ninject。您的应用程序中应该只有一个 DI 配置,并且它应该在 Application_start() 上。

您的业务层肯定会包含业务对象和将使用存储库契约(Contract)的业务服务。这些服务会。在这种情况下,您还将在 Application_Start() 中配置服务绑定(bind)(将 IHotelService 绑定(bind)到 HotelService)。

我看到的设计是您的 Controller 现在将使用服务(您将在 Controller 构造函数中注入(inject) IHotelService)

希望对你有帮助!朱利安

关于c# - 在 MVC 4 中为 3 层架构配置 Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17906698/

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