我有以下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属性。