【问题标题】:Autofac, WebAPI, and Media FormattersAutofac、WebAPI 和媒体格式化程序
【发布时间】:2013-09-14 18:25:49
【问题描述】:

我需要一些帮助。我正在尝试使用 Autofac 来获取自定义媒体格式化程序所需的一些依赖项。我关注了 Wiki,但它有点令人困惑。我正在尝试对媒体格式化程序使用属性注入,因为它需要在全局配置中注册。

代码:

public class UserMediaFormatter : JsonMediaTypeFormatter
{
    public UsersRepository repository { get; set; }
}

 public class WebApiApplication : System.Web.HttpApplication
 {
    GlobalConfiguration.Configuration.Formatters.Insert(2, new UserMediaFormatter());
    builder.RegisterType(typeof(UserMediaFormatter)).PropertiesAutowired()
               .As<MediaTypeFormatter>()
               .InstancePerApiControllerType(typeof (UsersController));

 }

 [AutofacControllerConfiguration]
 public class UsersController : ApiController
 {
 }

【问题讨论】:

  • 你想在你的所有控制器中全局使用你的UserMediaFormatter吗?因为InstancePerApiControllerType 只为UsersController 注册它,或者这就是你想要的?
  • 这就是我希望发生的事情,但由于某种原因它似乎不起作用。

标签: asp.net-web-api autofac


【解决方案1】:

如果您想让 Autofac 将您的自定义格式化程序添加到标记的控制器,那么您不需要将其添加到 GlobalConfiguration.Configuration.Formatters,因为它使您的格式化程序全局可用并且它会阻止 Autofac 在其上注入属性。

所以删除GlobalConfiguration.Configuration.Formatters.Insert 调用

并使用以下确切的语法来注册您的格式化程序:

builder.Register<MediaTypeFormatter>(c => new UserMediaFormatter())
       .PropertiesAutowired()
       .InstancePerApiControllerType(typeof(UsersController));

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多