2017-01-09 1 views
0

Autofac을 사용하여 Property Injection을 사용하면 Autofac은 속성에 액세스 할 때 getter 메서드를 사용하여 해결합니다. 생성자 주입이 이슈 생성시 해결되면 Autofac을 사용하는 속성 주입이 지연이라고 말할 수 있습니다.Autofac을 사용할 때 속성 주입이 느슨합니까?

제발 이해 해주십시오.

감사합니다, 라시

+1

당신이 실제로이 질문을하기 전에 단위 테스트 또는 코드의 형태로 새로운 것을 시도 했

: 여기
class Program { private static int _logCount = 1; public static void Log(string message) { Console.WriteLine($"[{_logCount}]: {message}"); _logCount += 1; } static void Main(string[] args) { var builder = new ContainerBuilder(); builder .RegisterType<Dependency>() .AsSelf(); builder .RegisterType<Service>() .AsSelf() .PropertiesAutowired(); var container = builder.Build(); Log("Before resolving Service"); var service = container.Resolve<Service>(); Log("After resolving Service"); Log("Accessing the Dependency property"); var dependency = service.Dependency; Console.ReadLine(); } } public class Service { private Dependency _dependency; public Dependency Dependency { get { return _dependency; } set { Program.Log("Dependency is being injected"); _dependency = value; } } } public class Dependency { } 

출력입니까? 기존 문서를 찾았습니까? –

답변

3

재산권 주입 게으른 없습니다. 속성은 컨테이너를 소유 한 서비스가 컨테이너에서 확인 될 때 ​​설정됩니다.

클래스 ServiceDependency의 속성이 포함 된 경우이 예제를 사용하십시오. Service 전에

  • 컨테이너
  • Service
  • 때의 해결 인스턴스에서 Dependency 속성에 액세스에서 해결 된 Service 후 용기
  • 에서 해결

    : 우리는 서로 다른 시간에 로그인 Service 클래스의 Dependency 속성이 설정되고 있습니다.
[1]: Before resolving Service 
[2]: Dependency is being injected 
[3]: After resolving Service 
[4]: Accessing the Dependency property 
+0

* Property Injection *은 [Temporal Coupling] (http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/)을 유발하므로 거의 모든 경우에 * Constructor Injection *이 있습니다. 훨씬 더 나은 선택. – Steven

관련 문제