2017-01-09 10 views
0

Autofacを使用してProperty Injectionを使用すると、プロパティがアクセスされるとき(getterメソッドを使用するとき)にAutofacが解決されますが、Autofacを使用するプロパティ注入がLazyであると言うことができます。Autofacを使用しているときにプロパティ注入が怠惰ですか?

私の理解を確認してください。

よろしく、 らし

+1

あなたが実際にこの質問をする前に、ユニットテストやコードの形で何かをしようとしましたか?既存のドキュメントを探しましたか? –

答えて

3

プロパティインジェクションは怠け者ではありません。プロパティは、それらを所有するサービスがコンテナから解決されるときに設定されます。

この例では、Serviceというクラスには、Dependencyのプロパティが含まれています。 私たちは、異なる時間にログインします。

  • Service
  • ときの解決されたインスタンスからDependencyプロパティにアクセスするときServiceがコンテナ
  • から解決された後Serviceがコンテナ
  • から解決される前に、 ServiceクラスのDependencyプロパティが設定されています
ここ
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 
{ 
} 

が出力されます。

[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

関連する問題