1

Structuremapは、すでに構築されたオブジェクトを取得し、設定された依存関係をそのオブジェクトにプッシュするためにセッターインジェクションを実行する「BuildUp」メソッドを定義します。

Autofacには同等の方法がありますか?

4

3 に答える 3

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);
    }
于 2013-04-10T21:41:08.347 に答える
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));
        }
}
于 2013-03-27T03:56:35.517 に答える
-2

Autofacの最近のバージョンでは、次のように簡単に使用できます。

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

于 2013-04-10T15:48:45.727 に答える