【问题标题】:How to Decoupling customer services to controllers in asp.net core mvc如何在 asp.net core mvc 中将客户服务与控制器解耦
【发布时间】:2020-06-11 07:41:26
【问题描述】:

伙计们:

我最近正在使用 dotnet-core-mvc 构建一个网站。 我写了一个“pagedList”类,它包括一个“分页”方法。 它现在可以在我的控制器中工作,但我想解耦这个类 使用我的控制器,我应该怎么做才能使我的“pagedList”类可以 与我的控制器解耦?

将我的“pagedList”类注册到 /Startup.cs/ConfigureServices 是一种好方法吗? THX!

这是我的代码:

/Services/PagedList.cs:

public class PagedList<T>: List<T>
    {
        public int TotalPages{get;private set;}
        public bool HasNextPage{get; private set;}
        public bool HasPrevPage{get; private set;}
        public int PageIndex{get; private set;}

        public PagedList()
        {           
        }

        public async Task<IQueryable<T>> Paging(IQueryable<T> collection, int pageIndex, int pageSize)
        {
            int count = await collection.CountAsync();
            TotalPages = (int)Math.Ceiling(count/(double)pageSize);

            if (pageIndex <= 0) { pageIndex = 1;}
            if (pageIndex > TotalPages) { pageIndex = TotalPages; }

            PageIndex = pageIndex;            
            HasNextPage =  (pageIndex < TotalPages) ? true : false;
            HasPrevPage =  (pageIndex > 1) ? true : false;

            collection =  collection.Skip(( pageIndex - 1 ) * pageSize).Take(pageSize);
            return collection;            
        }
    }
}

/Controllers/XXController.cs:

public async Task<IActionResult> Index()
{
    ...

    PagedList<XX> pageList = new PagedList<XX>();
    data= await pageList.Paging(data, pageIndex, pageSize);
    ...

    return View(data);
}

【问题讨论】:

    标签: asp.net-core model-view-controller


    【解决方案1】:

    这是一个演示,你可以创建一个IPagedService和PagedService,然后在startup.cs中注册。

    用户.cs:

    public class User
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string PhoneNumber { get; set; }
    }
    

    IPagedService.cs:

    public interface IPagedService
        {
            PagedList<User> PagedList(); 
        }
    

    PagedService.cs:

    public class PagedService : IPagedService
        {
            public PagedList<User> PagedList()
            {
                return new PagedList<User>();
            }
    
    }
    

    Startup.cs:

    services.AddTransient<IPagedService, PagedService>();
    

    控制器:

    public class TestController : Controller
        {
            private readonly IPagedService _pagedService;
            public TestController(IPagedService pagedService) {
                _pagedService = pagedService;
            }
            public IActionResult Test() {
                PagedList<User> users = _pagedService.PagedList();
                return View();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 2011-06-04
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      相关资源
      最近更新 更多