1

Structuremap 定义了一个“BuildUp”方法,该方法采用已构建的对象并执行 setter 注入以将配置的依赖项推送到该对象中。

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 回答