2015-10-20 53 views
1

我想写一个自定义控制器配置属性,并且配置似乎并没有采取,请求没有使用我们的自定义合约解析器,这里是我们的代码看起来像在实现IControllerConfiguration的类中。WebApi中的每个控制器配置的问题

using System; 
using System.Net.Http.Formatting; 
using System.Web.Http.Controllers; 

namespace OurCoolStuff.Api.Common.Attributes 
{ 
    public class SuperAwesomeCustomConfig: Attribute, IControllerConfiguration 
    { 
     public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor) 
     { 
      controllerSettings.Formatters.Clear(); 
      controllerSettings.Formatters.Add(GetCustomContractResolver()); 
     } 

     private MediaTypeFormatter GetCustomContractResolver() 
     { 
      var formatter = new JsonMediaTypeFormatter 
      { 
       SerializerSettings = 
       { 
        ContractResolver = new OurSuperCoolCustomContractResolver() 
       } 
      }; 
      return formatter; 
     } 
    } 
} 

然后,我们只是用很简单地想:

[SuperAwesomeCustomConfig] 
TestController : ApiController{ 
...Controller methods here 
} 

我们试图插入SuperAwesomeCustomConfig类的内部断点,并初始化方法,但他们从来没有被击中。

需要注意的两件事: 我们的控制器方法返回Task<>async,我们也使用统一进行依赖注入。

我们的统一代码看起来像这样在UnityConfig.cs

public static void RegisterComponents() 
     { 
      var container = new UnityContainer(); 
      GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); 
     } 

据我可以告诉这是相当样板。

+0

什么是你的依赖注入相关的代码? –

+0

已更新为Unity代码。 –

+0

好吧,但我非常怀疑问题是在你的依赖注入相关的代码与Unity,可能是你尝试使用这些服务的控制器,这是不是与Unity注册 –

回答

0

因此,事实证明,我们使用的ContractResolver正在查看错误的类型,所以总之一切都按预期工作。我应该花更多的时间来挖掘这个问题。无耻的LINQpad插件,因为这让我们能够弄清楚我们的定制ContractResolver有什么问题。