Как перенести сложный тип в реализацию .net Core Service - PullRequest
0 голосов
/ 04 января 2019

Я впервые использовал ядро ​​.net.

Мне удалось создать работающее сетевое веб-приложение, которое вызывает данные с моего сервера SQL с использованием Onion Layers.Мой макет выглядит следующим образом:

Architecture
  Core
     Application Services
     Domain Services
  Core.Entity
Infrastructure
UI
  API
     CemeteryAPI
  Web
     MVC Web Application

Мой HomeController имеет PageModel со сложным типом поиска, который состоит из примерно 5 или более целых 5-6 списков.В прошлом я бы сделал:

var model = new Models.HomePageModel
     {
        Search = new Business.Search()
     };

public partial class Search
{
    public String Surname { get; set; }
    public String Forename { get; set; }
    public String Initials { get; set; }
    //etc.
}

Я зарегистрировал свои службы при запуске в ConfigureServices и попытался внедрить этот способ

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<ICemeteryRepository, CemeteryRepository>();
    services.AddScoped<ICountryRepository, CountryRepository>();
    //etc
    services.AddScoped<ICemeteryService, CemeteryService>();
    services.AddScoped<ICountryService, CountryService>();
}

CemeteryService

   //ApplicationService
   public class CemeteryService : AbstractUnitOfWorkService, ICemeteryService
   {
    public CemeteryService(IUnitOfWork uow) : base(uow) { }

    public int Count()
    {
        return _unitOfWork.CemeteryRepository.Count();
    }

    public Cemetery Get(int id)
    {
        return _unitOfWork.CemeteryRepository.Get(id);
    }

    public List<Cemetery> List()
    {
        return _unitOfWork.CemeteryRepository.GetAll().ToList();
    }
}

ICemeterRepository

//DomainService
public interface ICemeteryRepository : IRepository<Cemetery>
{
}

CemeteryRepository

public class CemeteryRepository : BaseRepository, ICemeteryRepository
  {
    public CemeteryRepository(SAWGPDBContext context) : base(context) { }

    public int Count()
    {
        return _context.Cemetery.Count();
    }

    public Cemetery Get(int id)
    {
        return _context.Cemetery.Find(id);

    }

    public IEnumerable<Cemetery> GetAll()
    {
        return _context.Cemetery;
    }

   //etc
}

ICemeteryInterface

public interface ICemeteryService
{
    int Count();
    List<Cemetery> List();
    //etc
}

public ActionResult Index([FromServices] ICasualtyService _CasualtyService, IPhotoService _PhotoService, ICountryService _CountryService, ICemeteryService _CemeteryService, IRegimentService _RegimentService)

        var model = new Models.HomePageModel
        {
            Search = new SearchPageModel(_PhotoService, _CasualtyService,  _CountryService, _CemeteryService, _RegimentService, )
        };

Это выглядело неправильно, но я не смогнайдите подходящие примеры, так как я не был уверен, что именно искать.Вышеуказанное возвращает

Сложные типы, связанные с моделью, не должны быть абстрактными или значениями и должны иметь конструктор без параметров.

Я предполагаю, что мне нужно создать SearchService, но я 'Мне не совсем понятно, как построить один для сложного типа.Любые указатели будут оценены.

...