В проекте .Core У меня есть интерфейс для ведения журнала:
public interface ILogger
{
void Trace(string format, params object[] args);
.........
void Fatal(string format, params object[] args);
}
, который используется в интерфейсе службы журнала:
public interface ILogService
{
ILogger GetLogger(string name);
ILogger GetLogger(Type typeName);
ILogger GetLogger<T>();
}
В проекте .Droid этот интерфейс реализован:
public class AndroidLogService : ILogService
{
public ILogger GetLogger(string name)
{
return new AndroidLogger(name);
}
public ILogger GetLogger(Type typeName)
{
return GetLogger(typeName.Name);
}
public ILogger GetLogger<T>()
{
return GetLogger(typeof(T));
}
}
В файле .Droid Setup.cs AndroidLogService зарегистрирован:
Mvx.LazyConstructAndRegisterSingleton<ILogService, AndroidLogService>();
Mvx.LazyConstructAndRegisterSingleton<IFileService, AndroidFileService>();
и, наконец, используется в каком-то файле в проекте .Droid:
private readonly ILogger _logger;
public AndroidFileService(IContextService contextService, ILogService logService, IEncryptionService encryptionService)
{
_logger = logService.GetLogger<AndroidFileService>();
.......
}
Наконецжурналы работают так:
_logger.Warn("Failed to retrieve logo. Error: {0}", ex);
Мои сомнения и вопросы: AndroidFileService никогда не вызывается с параметрами, описанными выше, но из документов MvvmCross я читал, что он называется Конструкционный впрыск
Хорошо, я понимаю эту часть, но одна вещь для меня мрачна: где существует реализация ILogger?Я не нашел во всем решении какой-либо части с чем-то вроде
Mvx.RegisterType<ILogger , SomeLogger>();
Как это может быть?Какой механизм используется для регистрации ILogger?