2009-04-15 2 views

답변

4

생성자 삽입시 쉽게 수행 할 수 없습니다. Hibernate 내부는 Lazy 로딩 코드 등을 사용하여 도메인 클래스로부터 상속받은 프록시 객체를 생성해야 할 수도 있습니다. 그래서 아는 한 객체의 생성을 무시하는 간단한 옵션이 없습니다.

당신은 속성 세터 주입을 통해 객체를 빌드 할 인터셉터를 작성함으로써 NHibernate와 함께 작동하는 의존성 주입을 쉽게 얻을 수 있습니다. 이 here의 예가 있습니다. 이 예제는 Windsor를 DI 컨테이너로 사용하지만, Structure Map (물론 here are the relevant docs for StructureMap)으로 똑같은 작업을 수행 할 수 있습니다 - "Setter Injection을 기존 오브젝트 (빌드 업)에 적용"섹션을 찾으십시오.

경고 : 도메인 모델에 종속성을 주입하는 것이 디자인 문제의 증상으로 간주되는 경우가 많으므로 많은 사람들이이를 피하기 때문에 코드 작성을 시작하기 전에 실제로하고 싶은 작업인지 확인하십시오!

+0

생성자 삽입 가능 – Paco

+0

불가능하다고 말하지 않았습니다. 쉽지 않다고 말했습니다. 내가 틀렸다면, 나에게 계발 해주세요 :) –

+0

그럼 잘 읽지 않아요. 죄송합니다. – Paco

1

IInterceptor를 구현하고 Objectfactory.BuildUp을 사용하여 onload 메서드에서 주입을 수행하면 설정을 수행 할 수 있습니다. 이것은 구현하기 쉽고, 세터 주입은 원하는 것이 아닐 수도 있습니다.

사용자 고유의 IBytecodeProvider 및 ReflectionOptimizer를 구현하여 생성자 삽입을 수행 할 수 있습니다. 이것은 조금 더 어렵지만 가능합니다!

엔티티에 물건을 주입하지 않는 것이 좋습니다. 99.9 %의 케이스에서 이것은 나쁜 디자인으로 이어지고 당신의 디자인에 레이어링을 불가능하게 만듭니다. 어쩌면 당신은 옳은 일인 경우의 0.01 %에 직면 할 수 있습니다. 그것은 goto 문을 타이핑 할 때 자주하는 일입니다.

2

this post from Fabio Maulo (현재 NHibernate 리드 개발자)을 살펴보면 몇 달 전에이 문제를 해결했습니다. 이 코드는 NHibernate 2.1에 대한 것이지만 IProxyFactoryFactory 파트를 제거하여 2.0.1GA로 백 포트 할 수 있다고 생각합니다.