在我的MVC项目中,我已经设置了我的MvcApplication_start():
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
已成功将。关于我的IProductsRepository绑定到MySqlProductsRepository:
public class NinjectControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel = new StandardKernel(new MyServices());
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
return null;
return (IController) _kernel.Get(controllerType);
}
public class MyServices: NinjectModule
{
public override void Load()
{
Bind<IProductsRepository>().To<MySqlProductsRepository>();
}
}
}
但我使用的是NHibernate,并且有一个单独的Session Factory类,它有一个返回ISession的GetSession()方法。
public static ISessionFactory SessionFactory = CreateSessionFactory();
private static ISessionFactory CreateSessionFactory()
{
var cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config"));
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, System.Environment.MachineName);
NHibernateProfiler.Initialize();
return cfg.BuildSessionFactory();
}
public static ISession GetSession()
{
return SessionFactory.GetCurrentSession();
}
我想设置它,以便在创建Ninject时传递我的MySqlProductsRepository和ISession对象:
public class MySqlProductsRepository : IProductsRepository
{
private readonly ISession _session;
public MySqlProductsRepository(ISession session)
{
_session = session;
}
我的Controller将交给IProductsRepository实例:
public class AdminController : Controller
{
private readonly IProductsRepository _productsRepository;
public AdminController(IProductsRepository productsRepository)
{
_productsRepository = productsRepository;
}
我的问题:
我似乎无法在我的IoC容器中弄清楚我将IProductsRepository绑定到我的存储库,如何注册ISession,如何在创建时将ISession传递给我的MyProductsRepository对象,并将MyProductsRepository对象传递给我的控制器?
答案 0 :(得分:2)
我写了几篇博文,解释了如何使用Ninject和ASP.NET MVC应用程序。博客文章中的应用程序使用您正在使用的相同技术:Ninject,NHibernate和MySql。我也在使用存储库模式。你正在做什么和这些帖子之间有很多相似之处。
http://blog.bobcravens.com/2010/07/using-nhibernate-in-asp-net-mvc/
http://blog.bobcravens.com/2010/06/the-repository-pattern-with-linq-to-fluent-nhibernate-and-mysql/
http://blog.bobcravens.com/2010/09/the-repository-pattern-part-2/
http://blog.bobcravens.com/2010/11/using-ninject-to-manage-critical-resources/
看一看。如果您有任何疑问,请随时与我联系。