Structuremap 定义了一个“BuildUp”方法,该方法采用已构建的对象并执行 setter 注入以将配置的依赖项推送到该对象中。
Autofac 有等效的方法吗?
问题是指已构建的对象(未在容器中注册的对象),因此正确答案是 InjectProperties 或 InjectUnsetProperties。
以下测试演示了该行为
public class TestPropertyInjection
{
public object ShouldBeInjectedByAutofac { get; set; }
}
[Fact]
public void Autofac_can_inject_properties()
{
var builder = new ContainerBuilder();
builder.RegisterType(typeof(object));
var container = builder.Build();
var existingObjectNotRegisteredInContainer = new TestPropertyInjection();
container.InjectProperties(existingObjectNotRegisteredInContainer);
// can also use InjectUnsetProperties to only set unset properties
//container.InjectUnsetProperties(existingObjectNotRegisteredInContainer);
Assert.NotNull(existingObjectNotRegisteredInContainer.ShouldBeInjectedByAutofac);
}
尝试InjectUnsetProperties。样本:
public class YourModule : Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
builder.RegisterType<YourClass>().OnActivated(e => e.Context.InjectUnsetProperties(e.Instance));
}
}
在 Autofac 的更新版本中,您可以简单地使用:
builder.RegisterType<YourClass>().PropertiesAutowired();