Dependency injection Web API:使用DI创建ApicController

Dependency 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 要解决依赖关系,我使用以下方

我有一个带参数化构造函数的ApiController。 我了解到框架可能使用依赖注入创建控制器

所以我这样做(就像这里解释的):

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;}
}