我有以下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会自动包含依赖项吗?我不希望通过控制器中的构造函数参数包含此依赖项。
答案 0 :(得分:0)
要在Autofac中实现属性注入,您应该只使用PropertiesAutowired扩展方法。在行后的autofac配置中:
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
插入行:
builder.RegisterType<ConnectionController>().PropertiesAutowired();
然后,如果在容器构建器中将某些内容注册为IConnectionManagerService,则会将其分配给ConnectionManager属性。