2
我有以下的WebAPI控制器(我已經去除了大部分爲簡潔的代碼)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會自動包含依賴項?我不想通過控制器中的構造函數參數來包含此依賴項。
除了你不想這樣做外,還有沒有其他具體的原因讓你不用構造函數注入? – nemesv
不是,我只是想盡可能地堅持標準,而不是修改以支持DI。 – user3547774
使用構造函數注入被認爲是最佳實踐。不要誤導Visual Studio默認生成的代碼。默認的VS模板通常不會傳達最佳做法。 – Steven