如果我使用Autofac使用Property注入,Autofac將在創建異議時在構造函數注入解析時訪問屬性(使用getter方法)時解析它,因此我們可以說使用Autofac的屬性注入是Lazy。使用Autofac時屬性注入是否懶惰?
請確認我的理解。
問候, 拉什
如果我使用Autofac使用Property注入,Autofac將在創建異議時在構造函數注入解析時訪問屬性(使用getter方法)時解析它,因此我們可以說使用Autofac的屬性注入是Lazy。使用Autofac時屬性注入是否懶惰?
請確認我的理解。
問候, 拉什
物業注入更是不可以偷懶。當擁有它們的服務將從容器中解析時,屬性將被設置。
舉一個例子,其中一個類Service
包含Dependency
類型的屬性。 我們會記錄在不同的時間:
Service
之前
Service
後從容器從Service
Dependency
屬性時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
重要的是要注意*屬性注入*導致[時間耦合](http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/),因爲在幾乎所有情況下,*構造函數注入*是一個更好的選擇。 – Steven
你真的問這個問題之前嘗試在單元測試或代碼的形式什麼?你有沒有尋找任何現有的文件? –