目前,我正在建立一个2层的网站。
我正在使用Ninject进行依赖注入。到目前为止,没关系。但现在,我想在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>();
}
}
的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);
}
}
感谢您的帮助。
答案 0 :(得分:2)
不确定您的问题,但我认为您不必在业务层中配置Ninject。您应该在应用程序中只有一个DI配置,它应该在Application_start()上。
您的业务层肯定会包含将使用存储库合同的Business Objects和Business Services。那些服务会。在这种情况下,您还将在Application_Start()中配置服务绑定(将IHotelService绑定到HotelService)。
我看到的设计是您的控制器现在将使用服务(您将在Controller构造函数中注入IHotelService)
希望它对你有所帮助! 于连
答案 1 :(得分:2)
只需将业务逻辑中的其他必需组件的绑定添加到AddBindings
中的NinjectControllerFactory
方法即可。 Ninject能够解析链接依赖关系,如controller - &gt;服务 - &gt;库中。