Dependency injection Web API:使用DI创建ApicController
我有一个带参数化构造函数的ApiController。 我了解到框架可能使用依赖注入创建控制器 所以我这样做(就像这里解释的): Global.asaxDependency injection Web API:使用DI创建ApicController,dependency-injection,constructor,controller,asp.net-web-api,Dependency Injection,Constructor,Controller,Asp.net Web Api,我有一个带参数化构造函数的ApiController。 我了解到框架可能使用依赖注入创建控制器 所以我这样做(就像这里解释的): Global.asax builder.RegisterControllers(Assembly.GetExecutingAssembly()); //or this builder.RegisterType<ObjectsController>().InstancePerHttpRequest(); Global.asax 要解决依赖关系,我使用以下方
builder.RegisterControllers(Assembly.GetExecutingAssembly());
//or this
builder.RegisterType<ObjectsController>().InstancePerHttpRequest();
Global.asax
要解决依赖关系,我使用以下方法:
builder.Register<IMyObject >((c, p) =>
{
//... create object ...
return obj;
}).InstancePerHttpRequest();
builder.Register((c,p)=>
{
//…创建对象。。。
返回obj;
}).InstancePerHttpRequest();
但我得到了这个错误:
“ObjectsController”没有默认构造函数
我想我可以使用DI来实现这一点。如果您想在ASP.NET Web API中使用DI,这个答案可以为您提供更好的解决方案:
如果您想在ASP.NET Web API中使用DI,此答案可以为您提供更好的解决方案:
最常见的解决方案是使用特定于DI的实现
那篇文章给出了Unity的一个例子,但是您应该能够使它非常容易地与AutoFac一起工作。最常见的解决方案是使用特定于DI的实现
那篇文章给出了Unity的一个例子,但是你应该能够使它很容易地与AutoFac一起工作。如果你使用Unity,这就是你在ASP.NET 4 Web API RC中需要做的全部工作(截至2013年8月8日): 添加对“Microsoft.Practices.Unity.dll”的引用[我使用的是3.0.0.0版,通过NuGet添加] 添加对“Unity.WebApi.dll”的引用[我使用的是0.10.0.0版,通过NuGet添加] 向容器注册类型映射-类似于由Unity.WebApi项目添加到项目中的Bootstrapper.cs中的代码。 在继承自ApiController类的控制器中,创建参数化构造函数,将其参数类型作为映射类型
瞧,你不用另一行代码就可以将依赖项注入到构造函数中!如果你使用的是Unity,这就是你在ASP.NET 4 Web API RC中需要做的全部工作(截至2013年8月8日): 添加对“Microsoft.Practices.Unity.dll”的引用[我使用的是3.0.0.0版,通过NuGet添加] 添加对“Unity.WebApi.dll”的引用[我使用的是0.10.0.0版,通过NuGet添加] 向容器注册类型映射-类似于由Unity.WebApi项目添加到项目中的Bootstrapper.cs中的代码。 在继承自ApiController类的控制器中,创建参数化构造函数,将其参数类型作为映射类型
瞧,您不需要另一行代码就可以将依赖项注入到构造函数中!正如其他人所建议的,使用任何IDependencyResolver实现似乎都是一个好主意 不幸的是,这并没有解决WebAPI在基于ApiController的类中需要无参数构造函数的问题。 =>我只是在我的web api控制器基类中使用属性注入而不是构造函数注入,并提供一个空的无参数构造函数
正如其他人所建议的,使用任何IDependencyResolver实现似乎都是一个好主意 不幸的是,这并没有解决WebAPI在基于ApiController的类中需要无参数构造函数的问题。 =>我只是在我的web api控制器基类中使用属性注入而不是构造函数注入,并提供一个空的无参数构造函数 相关:。该问题涉及不同的DI容器,但解决方案(关于)相同。或查看。相关:。该问题涉及不同的DI容器,但解决方案(关于)相同。或查看。
builder.Register<IMyObject >((c, p) =>
{
//... create object ...
return obj;
}).InstancePerHttpRequest();
public class ApiControllerBaseWithDependency : ApiController
{
[Microsoft.Practices.Unity.Dependency]
protected MyServiceType Service { get; set;}
}