Я новичок в концепции ядра .net и инъекции зависимостей. Я хочу внедрить интерфейс службы в конструктор веб-API, интерфейс службы и реализация находятся в другом проекте. Пожалуйста, найдите ниже уровни моего приложения,
В startup.cs я уже добавил строку ниже,
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddSingleton<IEntriesService, EntriesService>();
}
Мой контроллер,
public class EntriesController : Controller
{
IEntriesService entryService;
public EntriesController(IEntriesService _entryService)
{
entryService = _entryService;
}
// GET: api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
Проблема в том, что когда я выполняю свое приложение API, оно не попадает в мой конструктор и показывает мне пустую страницу, как показано ниже,
Без добавления конструктора приложение работает нормально.
Мой IEntriesService,
public interface IEntriesService
{
RepeatEntries Get(int Id);
}
My EntriesService,
public class EntriesService : IEntriesService
{
IUnitOfWork _unitOfWork;
public EntriesService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public bool Add(RepeatEntries entity)
{
_unitOfWork.EntryRepository.Add(entity);
return true;
}
}
Мой IUnitOfWork,
public interface IUnitOfWork : IDisposable
{
IEntriesRepository EntryRepository { get; }
void Complete();
}
Мой UnitOfWork,
public class UnitOfWork : IUnitOfWork
{
private readonly IEntriesRepository _entryRepository;
public UnitOfWork(IEntriesRepository entryRepository)
{
_entryRepository = entryRepository;
}
public IEntriesRepository EntryRepository
{
get
{
return _entryRepository;
}
}
void IUnitOfWork.Complete()
{
throw new NotImplementedException();
}
#region IDisposable Support
private bool disposedValue = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
// TODO: dispose managed state (managed objects).
}
// TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
// TODO: set large fields to null.
disposedValue = true;
}
}
// TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
// ~UnitOfWork() {
// // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
// Dispose(false);
// }
// This code added to correctly implement the disposable pattern.
void IDisposable.Dispose()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
Dispose(true);
// TODO: uncomment the following line if the finalizer is overridden above.
// GC.SuppressFinalize(this);
}
#endregion
}
Что еще мне нужно добавить, чтобы он заработал? Возможно ли это или мне нужно изменить свой подход?
EntriesService
? Мы понятия не имеем, есть ли у него какие-либо зависимости, и зарегистрированы ли вы их или нет. - person Tseng   schedule 01.05.2017Startup
классе, поэтому он не попадает в ваш контроллер. Вы можете добавить диагностическое промежуточное ПО в начало конвейера, чтобы каждый раз при возникновении необработанного исключения вы видели страницу исключения с подробностями и трассировкой стека. Для этого добавьте пакет nuget в свой проектMicrosoft.AspNetCore.Diagnostics
, а затем добавьтеapp.UseDeveloperExceptionPage()
в начало методаStartup.Configure()
. Надеюсь, это даст вам больше подробностей о том, что происходит. - person Alexey Andrushkevich   schedule 01.05.2017