У меня есть проект C# MVC
с использованием Repository Pattern
и Ninject
(DI). Все работает нормально.
Внутри репозитория. Я создаю экземпляр класса для обработки некоторых вызовов внешних API, например:
public class EmployeeRepository : IEmployeeRepository
{
private readonly AppState _appState;
public EmployeeRepository(IAppStateProvider appStateProvider)
{
_appState = appStateProvider.AppState;
}
public bool ProcessEmployee(long employeeId, object data)
{
var api = new ExternalAPI(_appState);
api.PostData(data);
return true;
}
}
Тогда мой ExternalAPI.cs
класс:
public class ExternalAPI: BaseRepository
{
[Inject]
public ILogRepository Logger { get; set; }
private readonly AppState _appState;
public ExternalAPI(AppState appState)
{
_appState = appState;
}
private bool PostData(object data)
{
bool returnVal = true;
// Some code here....
Logger.InsertLog(data); // HERE Logger IS NULL
return returnVal;
}
}
Я получаю исключение, потому что Logger
- это null
.
И в моем основном проекте NinjectWebCommon.cs
файл Im регистрирует зависимость правильно:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind(typeof(ILogRepository)).To(typeof(Data.LogRepository));
}
Любая подсказка, почему [Inject]
из ILogRepository
не работает в ExternalAPI
классе?
Возможно, потому что из EmployeeRepository я создаю новый экземпляр этого класса:
var api = new ExternalAPI(_appState);
Любой совет, и как я могу заставить инъекцию ILogRepository
работать в ExternalAPI
классе?