Structuremap定义了一个'BuildUp'方法,该方法接受已构造的对象并执行setter注入以将已配置的依赖项推送到该对象中。
Autofac是否有等效的方法?
答案 0 :(得分:3)
问题是指已经构造的对象(未在容器中注册的对象),因此正确的答案是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);
}
答案 1 :(得分:1)
试试InjectUnsetProperties。 样品:
public class YourModule : Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
builder.RegisterType<YourClass>().OnActivated(e => e.Context.InjectUnsetProperties(e.Instance));
}
}
答案 2 :(得分:-2)
在最新版本的Autofac中,您只需使用:
builder.RegisterType<YourClass>().PropertiesAutowired();