Autofac WEBAPI通过属性插入Controller依赖项

时间:2014-07-23 05:23:57

标签: asp.net-web-api dependency-injection autofac

我有以下WebAPI控制器(为简洁起见,我删除了大部分代码)

public class ConnectionController : ApiController
{
    /// <summary>
    /// Gets or sets the connection manager.
    /// </summary>
    /// <value>
    /// The connection manager.
    /// </value>
    public IConnectionManagerService ConnectionManager
    {
        get;
        set;

    }

}

我正在尝试通过AutoFac插入IConnectionManagerService,这是我到目前为止的代码

// Create the container builder.
var builder = new ContainerBuilder();

// Register the Web API controllers.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

// Register other dependencies.
builder.Register(c => new ConnectionManagerService()).As<IConnectionManagerService>().InstancePerRequest();                      

// Build the container.
var container = builder.Build();

// Create the depenedency resolver.
var resolver = new AutofacWebApiDependencyResolver(container);

// Configure Web API with the dependency resolver.
GlobalConfiguration.Configuration.DependencyResolver = resolver;

现在我在控制器内部尝试使用ConnectionManager时,我得到null。我以为Autofac会自动包含依赖项吗?我不希望通过控制器中的构造函数参数包含此依赖项。

1 个答案:

答案 0 :(得分:0)

要在Autofac中实现属性注入,您应该只使用PropertiesAutowired扩展方法。在行后的autofac配置中:

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

插入行:

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

然后,如果在容器构建器中将某些内容注册为IConnectionManagerService,则会将其分配给ConnectionManager属性。