Structuremap定義了一個'BuildUp'方法,該方法採用已經構建的對象並執行setter注入以將已配置的依賴關係推送到該對象中。Autofac相當於「BuildUp」
Autofac有一個等效的方法嗎?
Structuremap定義了一個'BuildUp'方法,該方法採用已經構建的對象並執行setter注入以將已配置的依賴關係推送到該對象中。Autofac相當於「BuildUp」
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();
這個工作,如果Autofac *創建* YourClass,但它並沒有在所有的工作,如果開始有instanceOfYourClass。 – user2246674 2013-06-26 21:24:59