我想知道是否有人可以提供帮助。我正在编写一个需要连接到2个独立数据库的MVC3应用程序。我正在使用NHibernate和Ninject来实现持久性。一切都很好地连接到一个数据库。在我的 Global.asax.cs 文件中,我有:
public class MvcApplication : NinjectHttpApplication
{
public static ISessionFactory SessionFactory = CreateSessionFactory();
public MvcApplication()
{
this.BeginRequest += new EventHandler(MvcApplication_BeginRequest);
this.EndRequest += new EventHandler(MvcApplication_EndRequest);
}
void MvcApplication_EndRequest(object sender, EventArgs e)
{
CurrentSessionContext.Unbind(SessionFactory).Dispose();
}
void MvcApplication_BeginRequest(object sender, EventArgs e)
{
CurrentSessionContext.Bind(SessionFactory.OpenSession());
}
private static ISessionFactory CreateSessionFactory()
{
var cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config"));
return cfg.BuildSessionFactory();
}
...
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
protected override void OnApplicationStarted()
{
log4net.Config.XmlConfigurator.Configure();
HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize();
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
我有一个Ninject课程
public class AdultDirectionsNinjectModule : NinjectModule
{
public override void Load()
{
...
this.Bind<ISession>().ToMethod(x => MvcApplication.SessionFactory.GetCurrentSession());
...
阅读并成为.NET新手后,我发现很难找到如何将我的应用程序连接到多个数据库。我在网上搜索过,但很多例子都是我头脑中的问题,或者不是我的问题。我意识到我需要多个会话工厂,但后来我不知道如何用Ninject连接它。如果我需要多个会话工厂,Ninject只允许我绑定一个 ISession,这是一个问题。我正在使用NHibernate的xml配置而且不流畅。
有人可以提供一些易于遵循的帮助来启动和运行两个会话工厂。我们将非常感激地提供任何帮助。
答案 0 :(得分:1)
您使用contextual binding和/或.Named()
。幸运的是,relevant docs 尚未更新为Ninject V2语法(但在wiki上观察这个空间......)现在有很多不同机制的例子。