DependencyResolver和Routing

时间:2016-08-12 14:58:12

标签: c# asp.net-mvc-4 asp.net-mvc-routing

我有一些代码可以正常使用Dependency Resolver和我的WebAPI控制器。 (我们还没有使用任何合适的DI解决方案,而且非常糟糕的人在这里。)

所以在我的网络解析器中我有;

  public object GetService(Type serviceType)
  {
    return serviceType == typeof(MyAPIController) ? new MyAPIController() : null;
  }

我的WebAPi.Config是;

{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
  name: "DefaultApi",
  routeTemplate: "api/{controller}/{id}",
  defaults: new { id = RouteParameter.Optional });
  config.DependencyResolver = new MyDependencyResolver();
}

工作正常。

我没有尝试实现日志记录,而不是在控制器中执行它,我试图在使用装饰器的日志记录控制器中执行它,所以我有;

public class MyLoggingController : ApiController, IMyController
{
    readonly ILogger _log;
    IMyController _controller;

...  other methods + constructor left out for brevity     

[Route("api/GetVersion/v1/")]
    [HttpGet]
    public System.Threading.Tasks.Task<HttpResponseMessage> GetVersion()
    {
        try
        {         
            _log.TraceAPI("MyLoggingController", "MyLoggingController.GetVersion");

            var response = _controller.GetVersion();
            return response;
        }
        catch (Exception ex)
        {
...omitted for brevity
        }
    }

在DependencyResolver中

   public object GetService(Type serviceType)
   {
       return serviceType == typeof(IMyController) ? new MyLoggingController(_log, new MyController()) : null;
   }

除了前言之外,当我现在浏览我的网址时,我收到了一个错误。我怀疑这个问题只是我的路由配置,因为它没有找到APIController和我所拥有的标准ControllerFactory类的defauts。 (它因为ControllerFactory返回IController而不是ApiController而崩溃)

所以,如果我是正确的,我如何更改我的路线,以便网址不会改变,但它会触及依赖解析器,要求正确的类。(/ p>

0 个答案:

没有答案