正确实现属性和DI实体

时间:2017-05-22 21:22:15

标签: c# dependency-injection attributes

我有一个应用程序并传递一些依赖注入事物(例如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参数...

如何正确解决这个问题?

0 个答案:

没有答案