Autofacを使用してProperty Injectionを使用すると、プロパティがアクセスされるとき(getterメソッドを使用するとき)にAutofacが解決されますが、Autofacを使用するプロパティ注入がLazyであると言うことができます。Autofacを使用しているときにプロパティ注入が怠惰ですか?
私の理解を確認してください。
よろしく、 らし
Autofacを使用してProperty Injectionを使用すると、プロパティがアクセスされるとき(getterメソッドを使用するとき)にAutofacが解決されますが、Autofacを使用するプロパティ注入がLazyであると言うことができます。Autofacを使用しているときにプロパティ注入が怠惰ですか?
私の理解を確認してください。
よろしく、 らし
プロパティインジェクションは怠け者ではありません。プロパティは、それらを所有するサービスがコンテナから解決されるときに設定されます。
この例では、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
* Property Injection *は[Temporal Coupling](http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/)を引き起こすことに注意してください。ほとんどの場合、* Constructor Injection *ははるかに良い選択。 – Steven
あなたが実際にこの質問をする前に、ユニットテストやコードの形で何かをしようとしましたか?既存のドキュメントを探しましたか? –