전 윈저, 뉴 버 네이트, 플루 언트 및 오토 맵핑 스태킹에 익숙하지 않아서 여기 내 무지를 변명하십시오. 나는 이미 Windsor nhib Isession 관리 문제에 대한 해결책을 얻으려는 많은 질문이 있지만 이미 그들 중 누구도 내 문제를 해결하지 못했기 때문에 이것에 대한 다른 질문을 게시하고 싶지 않습니다. 내 저장소에서 Db를 호출하려고 할 때 여전히 예외가 닫히고 있습니다. 여기에 컨테이너 설정 코드가 있습니다. 내 저장소에서Castle Windsor, Fluent Nhibernate 및 Automapping Isession 폐회 문제
container.AddFacility<FactorySupportFacility>()
.Register(
Component.For<ISessionFactory>()
.LifeStyle.Singleton
.UsingFactoryMethod(() => Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2005.
ConnectionString(
c => c.Database("DbSchema").Server("Server").Username("UserName").Password("password")))
.Mappings
(
m =>
m.AutoMappings.Add
(
AutoMap.AssemblyOf<Message>(cfg)
.Override<Client>(map =>
{
map.HasManyToMany(x => x.SICCodes).Table("SICRefDataToClient");
})
.IgnoreBase<BaseEntity>()
.Conventions.Add(DefaultCascade.SaveUpdate())
.Conventions.Add(new StringColumnLengthConvention(),new EnumConvention())
.Conventions.Add(new EnumConvention())
.Conventions.Add(DefaultLazy.Never())
)
)
.ExposeConfiguration(ConfigureValidator)
.ExposeConfiguration(BuildDatabase)
.BuildSessionFactory() as SessionFactoryImpl),
Component.For<ISession>().LifeStyle.PerWebRequest.UsingFactoryMethod(kernel => kernel.Resolve<ISessionFactory>().OpenSession()
));
은 내가 private readonly ISession session;
을 주입하고 <httpModules>
안에 내 Web.config의에서
public User GetUser(int id)
{
User u;
u = session.Get<User>(id);
if (u != null && u.Id > 0)
{
NHibernateUtil.Initialize(u.UserDocuments);
}
return u;
을 followes로 사용합니다. 나는 또한이 nHibernate 수있는 모든 웹 응용 프로그램 개발의 기본적인 필요를 위해 구성 같은 복잡한 일이라고 믿을 수 없어,이 라인
<add name="PerRequestLifestyle"
type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor"/>
내가 아직 여기 퍼즐의 일부를 누락을 추가 한 성 윈저.
나는 여기에 코드 windsor-nhibernate-isession-mvc을 따르려고 노력해 왔고 똑같은 문제가있는 것으로 보였으 나 거기에서 내 질문을 게시했지만 내 문제가 해결되지 않았습니다.
UPDATE MooKid8000 내가 지금이
private void AddRepositories()
{
container.Register(
AllTypes.FromAssembly(typeof(MembershipRepository).Assembly)
.Pick()
.Configure(c => c.Interceptors(
InterceptorReference.ForKey("simpleLogger")).Anywhere
)
.Configure(c => c.LifeStyle.Is(LifestyleType.Transient))
.WithService.FirstInterface());
}
에 내 성 레지스터 코드를 업데이트하지만 여전히 ISession 받고 있어요 나의 서비스뿐만 아니라 일시적으로 등록해야합니까, 폐쇄 문제가있다 그들은 일시적이어야하며 왜 더 자세히 설명 할 수없는 싱글의
MooKid8000의 제안, 난 그냥 있는지 내 서비스와 reposit를 만들 필요가 100 % 정확했다 UPDATE ories는 LifestyleType.Transient로 범위가 지정되었으므로 ISession이 지워지지 않았습니다. 처음에는 성 성 등록 코드를 보지도 않고 멋진 곳 Mookid8000.
나를 위해 intrested 누구든지 내게 연락하고 나는 당신에게 내 컨테이너 설치를 보낼 수 있습니다.
ASP.NET MVC와 NHibernate를 사용하는 Windsor 튜토리얼을 살펴보고 Windsor 또는 IoC 개념에 대한 사전 경험이없는 사람들을 대상으로 할 수 있습니다. http://stw.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx 무엇이 명확하지 않거나 혼란 스럽거나 잘 설명되지 않으면 튜토리얼에 대한 의견을 공유하는 것을 잊지 마십시오 –
유창한 구문이 최악입니다. 나는 그 코드가하려고하는 것을 읽으 려하지 않을 것입니다. 죄송합니다. – Phill
나중에 자세하게 살펴 보겠습니다. 마지막 몇 시간 동안 그런 asp.net MVC 3 예제를 검색 할 때였습니다. – Simon