Autofac相当于" BuildUp"

时间:2013-03-26 22:30:20

标签: autofac

Structuremap定义了一个'BuildUp'方法,该方法接受已构造的对象并执行setter注入以将已配置的依赖项推送到该对象中。

Autofac是否有等效的方法?

3 个答案:

答案 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();