【发布时间】:2010-11-19 22:20:02
【问题描述】:
在我的 MVC 项目中,我设置了 MvcApplication_start() :
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
并且已经成功地将一个关于我的 IProductsRepository 的 .To 绑定到 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();
}
我想对其进行设置,以便在创建 MySqlProductsRepository 时通过 Ninject 传递 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 对象传递给我的控制器?
【问题讨论】:
标签: ioc-container ninject