Structuremapは、すでに構築されたオブジェクトを取得し、設定された依存関係をそのオブジェクトにプッシュするためにセッターインジェクションを実行する「BuildUp」メソッドを定義します。
Autofacには同等の方法がありますか?
Structuremapは、すでに構築されたオブジェクトを取得し、設定された依存関係をそのオブジェクトにプッシュするためにセッターインジェクションを実行する「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();