現在、2層のWebサイトを構築しています。
- Web UI: これは MVC 4 プロジェクトで、ユーザーとの対話に使用されます
- データ アクセス: これは C# ライブラリです。このレイヤーは、データベースとのやり取りを担当します。
依存性注入に Ninject を使用しています。ここまでは、問題ありません。しかし今、 Web UI と Data Access の間に Business Logic と呼ばれる新しいレイヤーを挿入したいと考えています。したがって、アーキテクチャは次のようになります。
- 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; } }
}
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);
}
}
ご協力いただきありがとうございます。