2010-04-20 5 views
8

프로그램이 문자 그대로 객체를 직렬화 해제 한 경우 (실제로는 문제가되지 않지만 BinaryFormatter가 사용 된 경우).새로 deserialize 된 객체의 종속성 다시 적용

이 개체의 종속성을 다시 주입하는 데 사용할 좋은 디자인은 무엇입니까?

공통 패턴이 있습니까?

컨테이너 내부의 팩토리로 작동하도록 Deserialize() 메서드를 래핑해야한다고 가정합니다.

감사합니다.

답변

10

개체 자체를 직렬화 할 수없는 종속성을 사용하여 개체를 직렬화하면 안됩니다.

두 클래스로 나눕니다. 으로 직렬화 가능한 부분을 추출하십시오.

deserialize 후 결과 개체를 원본 클래스의 인스턴스 (종속성이있는 인스턴스)와 연결할 수 있습니다.

+1

입니다. "컴퓨터 과학의 모든 문제는 너무 많은 간접 계층 문제를 제외하고 다른 수준의 간접 기술로 해결할 수 있습니다." –

+0

제 제안은 간접적 인 계층을 제거하는 것으로 생각합니다. (또는 적어도 추가로 필요성을 제거하십시오!) –

+0

제프를 인정해야합니다. 이것이 제 마음의 뒤를 possible 수있는 가능한 해결책이었습니다. 지금 구현했고 코드베이스가 더 좋습니다. – nbevans

0

OnDeserialized 속성을 사용하여 다시 주입하는 방법을 지정합니다.

+0

하지만 컨테이너 자체에 대한 의존성이 반드시 필요합니다. 즉 황금 IoC 규칙을 위반합니까? – nbevans

+0

Microsoft.Practices.ServiceLocation과 같은 것을 사용하는 경우 사실이 아닙니다. 컨테이너 중립적입니다. –

+0

컨테이너 중립적 인, 그러나 여전히 컨테이너에 의존. –

0

Unity는 "BuildUp"이라는 개념을 사용하여 기존 개체의 종속성을 충족하도록 요청할 수 있습니다. autofac (태그에서 사용한다고 가정하는 autofac에는 동등한 것이 있는지 모르겠습니다.)

+1

속성 주입은 Autofac 동등 물 –

관련 문제