아래에서 구조 맵으로 변환 할 수 있습니까?이 Windsor 스 니펫을 NHibernate의 StructureMap으로 변환하십시오.
public class NHibernateInstaller : IWindsorInstaller
{
#region IWindsorInstaller Members
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<ISessionFactory>()
.UsingFactoryMethod(k => BuildSessionFactory()));
container.Register(Component.For<NHibernateSessionModule>());
container.Register(Component.For<ISessionFactoryProvider>().AsFactory());
container.Register(Component.For<IEnumerable<ISessionFactory>>()
.UsingFactoryMethod(k => k.ResolveAll<ISessionFactory>()));
HttpContext.Current.Application[SessionFactoryProvider.Key]
= container.Resolve<ISessionFactoryProvider>();
}
#endregion
public ISessionFactory BuildSessionFactory() { ... }
}
나는 지금까지 내를 Global.asax이 있습니다
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
IContainer container = new Container(
x =>
{
x.For<ISessionFactory>().Use // ??? NHibernateHelper.BuildSessionFactory();
x.For<IControllerActivator>().Use<StructureMapControllerActivator>();
x.For<IBar>().Use<Bar>();
}
);
DependencyResolver.SetResolver(new StructuredMapDependencyResolver(container));
}
NHibernateHelper.BuildSessionFactory은(), ISessionFactory에 대한 것을 설정하는 방법을 잘 내 방법이 아닙니다.
내 컨테이너에 NHibernateSessionModule을 넣어야하는지 잘 모르겠다. web.config에서 모듈을 연결했는데 충분하지 않습니까?
ISessionFactoryProvider가 ".AsFactory()"로 유선화 된 것처럼 나머지를 이해하지 못합니다. 구현을 제공 할 필요가 없습니까?
resolveAll은 무엇을하고 있습니까?
저는 StructureMap (및 일반 DI)을 처음 사용 했으므로 추후에 많이 감사드립니다.
IContainer container = new Container(c =>
{
c.Scan(s=>
{
// This autoregisters the IFoo to Foo
s.AssembliesFromApplicationBaseDirectory();
s.WithDefaultConventions();
};
// SessionFactory needs to be a singleton object
c.ForSingletonOf<ISessionFactory>()
.Use(NHibernateHelper.BuildSessionFactory());
// Add your own interceptor implementation here
c.For<IInterceptor>().Use<EmptyInterceptor>();
// I assume that NHibernateSession uses the NHibernateSessionModule
// I use a similar implementation named TransactionBoundaryModule
c.For<INHibernateSession>()
.HybridHttpOrThreadLocalScoped()
.Use<NHibernateSession>();
// Gets the current session from the NHibernateSession
// Ensures one session per request
c.For<ISession>().Use(x =>
{
var instance = x.GetInstance<INHibernateSession>();
return instance.CurrentSession;
});
// Same for StatelessSession
c.For<IStatelessSession>()
.Use(x => x.GetInstance<ISessionFactory>()
.OpenStatelessSession());
};
은 참고 ... 내가 https://github.com/codeprogression/Fluently-Persistent에서 참조 구현을 가지고 :
아주 좋은, btw, 당신은 무엇을 위해 무국적 세션을 사용합니까? 성능상의 이유로 읽기 전용 객체를위한 것입니까? – Blankman
btw, 저는 이것을 사용하고 있습니다 : https://gist.github.com/852307 – Blankman
이 기사는 http://nhforge.org/blogs/nhibernate/archive/2011/03/03/effective-nhibernate- session-management-for-web-apps.aspx – Blankman