Как Разрешить Круговой интерфейс зависимости в конструкторе - PullRequest
0 голосов
/ 04 октября 2019
public class Logger : ILogger
{
    private readonly ILoggerHandler LoggerH;      
    public Logger(ILoggerHandler _LoggerH)
    {
        LoggerH = _LoggerH;           
    }


    public async Task exception(LogObj _log)
    { 
        await LoggerH.Log(_log); // Called ILoggerHandler Method
    } 
}



public interface ILogger
{      
    Task exception(LogObj _log);       
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public interface ILoggerHandler
{
    Task Log(LogObj log);
}



public class LoggerHandler: ILoggerHandler
{

    private readonly IAPIHandler _apiHandler;


    public LoggerHandler(IAPIHandler apiHandler)
    {
        _apiHandler = apiHandler;

    }



    public async Task Log(LogObj log)
    {
        try
        {               
     var request = JsonConvert.SerializeObject(log);                
     await _apiHandler.Process(request, url, HttpMethode.POST, _headers); // Called IAPIHandler Method
        }
        catch (Exception ex)
        {

        }
    }     

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public interface IAPIHandler
{
    Task<string> Process(string Request, string RequestURL, string httpMethode, Dictionary<string, string> Header = null);
}





public class APIHandler : IAPIHandler
{
    private readonly DateTime requestTime;
    private readonly ILogger _logger;

    public APIHandler(ILogger logger)
    {
        _logger = logger;
        this.requestTime = DateTime.Now;
    }


    public async Task<string> Process(string Request, string RequestURL, string httpMethode, Dictionary<string, string> Header = null)
    {
        string content = string.Empty;
        try
        {
           // code for calling the service(Logger)
        }
        catch (WebException wex)
        {
            content = "Error";
            var response = wex.Response as HttpWebResponse;
            await _logger.exception(wex, Request, this.requestTime);  // Called ILogger Method
        }
        catch (Exception ex)
        {
            content = "Error";
            await _logger.exception(ex, Request, this.requestTime);
        }
        return content;
    }
  1. ILogger состоит из метода исключение , которое регистрирует ошибкувсякий раз, когда возникает исключение в коде
  2. метод исключения в ILogger вызывает метод Log in ILoggerHandler , который вызывает службу журнала
  3. ILoggerHandler вызов IAPIHandler для вызова службы
  4. Чтобы зарегистрировать исключение в IAPIHandler снова ILogger метод исключения называется

, так что это приводит к круговой зависимости, поэтому нужна помощь в решении этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...