我有一个应用程序并传递一些依赖注入事物(例如logger):
ILog _logger;
_logger = new NLogService.NLogService();
if (serviceType == typeof(OCRAPIController))
return new OCRAPIController(_logger);
Domain.ILog _logger;
public OCRAPIController(Domain.ILog logger)
{
if (logger == null)
throw new ArgumentNullException(nameof(logger));
_logger = logger;
}
然后使用它:
_logger.AddLog(...);
它工作正常。问题在于属性。即我有以下属性:
public class ReportAPIAccessAttribute : ActionFilterAttribute
{
public override async Task OnActionExecutingAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
{
我想记录一些东西。当然,我不能将ILog作为构造函数的参数传递。我可以创建静态方法作为ILog的包装并调用它,甚至直接在属性中创建NLogService.NLogService()。但是我不喜欢这两种方法,因为我想在应用程序中只有一个位置,我直接调用NLogService。我可以为属性创建ServiceLocator,但是其他开发人员(或者我忘记的时候)可以调用ServiceLocator,其中应该调用DI参数...
如何正确解决这个问题?