如果我使用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
你真的问这个问题之前尝试在单元测试或代码的形式什么?你有没有寻找任何现有的文件? –