【发布时间】:2014-07-23 22:49:54
【问题描述】:
我有以下 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 时,我得到空值。我以为 Autofac 会自动包含依赖项?我不想通过控制器中的构造函数参数包含这种依赖关系。
【问题讨论】:
-
除了你不想这样做之外,还有其他具体的理由不让你进行构造函数注入吗?
-
不是真的,我只是想尽可能地坚持开箱即用的标准,而不是进行修改以支持 DI。
-
使用构造函数注入被认为是最佳实践。不要误导 Visual Studio 默认生成的代码。默认的 VS 模板通常不会传达最佳实践。
-
要使用构造函数注入,是否需要对Controller进行任何机会,我实际上确实尝试过构造函数注入,但它甚至没有实例化构造函数,我确定我在这里遗漏了一些东西。
标签: asp.net-web-api dependency-injection autofac