2010-08-02 6 views

답변

9

이것은 모듈 (예 : 그런 다음

class InjectPropertiesByDefaultModule : Autofac.Module { 
    protected override void AttachToComponentRegistration(
     IComponentRegistration registration, 
     IComponentRegistry registry) { 
      registration.Activating += (s, e) => { 
       e.Context.InjectProperties(e.Instance); 
      }; 
    } 
} 

:

builder.RegisterModule<InjectPropertiesByDefaultModule>(); 

난 당신이 PropertiesAutowiredtrue paramerter을 오해 할 수 있다고 생각 -이 지원되며 아마 false을 유지하는 방법을 순환 종속성을 결정합니다. true 설정을 에뮬레이션하려면 위의 Activating 대신 Activated에 연결할 수 있습니다.

그러나 가능하면 "012"와 같은 "선택적"종속성에 대해서도 생성자 삽입을 사용하십시오. 더 깨끗한 구성 요소 (예 : 필드는 readonly으로 만들 수 있음)와 종속성을 더 쉽게 이해할 수 있습니다 (모두 생성자에 포함되며 개별 속성의 의미에 대한 추측은 없습니다).

응용 프로그램의 여러 구성이며 일부 구성에서는 종속성이 실제로 없어집니다.

이러한 경우에도 일반적으로 "Null Object"패턴이 더 적합합니다.

+0

Log4Net을 통합하는 경우 http://code.google.com/p/autofac/wiki/Log4NetIntegration에서 확인하십시오. –

+0

Nic. 귀하의 코드에서 "e"는 어디에서 왔습니까? – Simon

+0

감사합니다. Simon - "등록"이되어 있어야합니다 - 지금 고쳐야합니다. –

0

아니,이 없다 "(참) .PropertiesAutowired"모든 시간을 사용하려는 해달라고 즉. 하지만 형식을 일괄 적으로 또는 관례에 따라 등록하면 더 쉽습니다. builder.RegisterAssemblyTypes(..)을 사용하십시오.

업데이트 : 예, 있습니다 (@Nicholas answer 참조).

+0

예상대로. 감사합니다. – Simon

관련 문제