我有一些代码可以正常使用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>