Autofac WEBAPI通过属性插入控制器依赖项



我有以下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。我以为autoface会自动包含依赖项?我不想通过控制器中的构造函数参数来包含这个依赖项。

要在autofacc中实现属性注入,您应该使用PropertiesAutowired扩展方法。在您的autoface配置中:

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

插入线:

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

如果在你的容器构建器中注册为IConnectionManagerService,它将被分配给ConnectionManager属性。

最新更新