2013-03-26 40 views
1

Structuremap定義了一個'BuildUp'方法,該方法採用已經構建的對象並執行setter注入以將已配置的依賴關係推送到該對象中。Autofac相當於「BuildUp」

Autofac有一個等效的方法嗎?

回答

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

嘗試InjectUnsetProperties。 樣品:

public class YourModule : Module 
{ 
     protected override void Load(ContainerBuilder builder) 
     { 
      base.Load(builder); 

      builder.RegisterType<YourClass>().OnActivated(e => e.Context.InjectUnsetProperties(e.Instance)); 
     } 
} 
-1

在較新版本的Autofac的,你可以簡單地使用:

builder.RegisterType<YourClass>().PropertiesAutowired();

+0

這個工作,如果Autofac *創建* YourClass,但它並沒有在所有的工作,如果開始有instanceOfYourClass。 – user2246674 2013-06-26 21:24:59