autofac을 사용하여 클래스의 객체를 인스턴스화 한 다음이를 저장 용 db4o에 전달하는 방법을 알 수 있습니다. db4o에서 객체 인스턴스를 검색해야 할 때, 객체를 autofac에 어떻게 등록합니까?Model 객체에 db4o와 autofac을 통합하는 방법은 무엇입니까?
원래 투명성 활성화/지속성을 구현하기 위해 db4o의 MSBuild 도구를 사용할 계획 이었지만, IActivatable::Bind()
에 추가 코드를 넣을 수 있도록 모든 내 Model 개체에 대해 IActivatable 인터페이스를 수동으로 구현해야하는 것처럼 보입니다. 포인터가 활성화 될 때 this
포인터를 등록하십시오.
최악의 경우, IActivatable::Bind()
의 구현은 등록을 수행하기 위해 현재의 Autofac 수명 범위의 싱글 톤에 액세스해야 함을 예상합니다. 분명히, db4o가 활성화되는 객체 인스턴스에 현재 수명 범위를 전달할 수 없습니다. 범위를 전달하는 것만 큼 나쁠만큼 대중의 싱글 톤에서 현재의 삶의 범위를 고수하는 사람들의 신음 소리를 상상할 수 있습니다.
db4o의 유형 핸들러를 구현하고 그 시점에서 객체 인스턴스화를 가로 채는 방법이 있지만 db4o를 사용하여 객체를 저장하는 데 따른 이득을 취소하는 것처럼 보입니다.
아니면 autofac을 사용하여 모든 객체를 인스턴스화하는 아이디어가 너무 미쳤나요? (예를 들어 망치가 있고 모든 것이 못처럼 보였습니다.) 모델 객체는 db4o가 사용하는 평범하고 오래된 '새로운'및 모든 마술에 의해 인스턴스화되어야합니까? 즉, View, ViewModel 및 Controller 객체에만 autofac을 사용하십시오.
도메인 이벤트를 사용하는 것은 유망한 방법 인 것처럼 보이지만 여전히 이벤트를 발생시키기 위해 데이터베이스에서 모든 개체로드를 전달할 수 있어야합니다. 투명한 활성화를 위해 너무 많은 경우 인스턴스를 autofac으로 등록하기 만하면 활성화를 "처리"해야 할 경우 더 이상 투명하지 않습니다. – Ants
db4o의 이벤트를 사용하는 것에 대한 @ Gamlor의 대답은 도메인 이벤트를 사용하는 아이디어와 잘 맞습니다.각 활성화를 "처리"해야하지만 적어도 각 도메인 객체의 코드는 건드릴 필요가 없습니다. 이 Central Activated 이벤트 핸들러를 호출하면됩니다. 필자는 autofac IContainer를 통과하지 못하게하는 방법을 아직 보지 못했습니다. DomainEvent.Container 또는 람다 (lambda)로 작성된 Activated 이벤트 핸들러 코드에 있어야합니다. – Ants