如何使用依赖关系来模拟数据.MVC5



我是MVC5的新手,我正在努力研究'搜索'功能。我的目标是从数据服务中获取数据。(也就是说,我在表单中输入数据并点击搜索按钮,如果有记录它就显示数据)

我已经创建了一个依赖来模拟数据(虚拟数据)。我如何将我的代码连接到控制器以实现我的目的?谢谢。

这是我的控制器和mock:

public class SearchController : Controller
{
    private readonly ISearchResultsService _resultsService;
    public SearchController() : this(DependencyFactory.NewResultsService())
    {         
    }
    public SearchController(ISearchResultsService resultsService)
    {
        _resultsService = resultsService;
    }
    // GET:Search
    public ActionResult Index()
    {
        return View();
    }
    // GET: Search/Details/5
    public ActionResult Details(int id)
    {
        return View();
    }
    // GET: Search/Create
    public ActionResult Create()
    {
        return View();
    }
    // POST: Search/Create
    [HttpPost]
    public ActionResult Create(FormCollection collection)
    {
        try
        {
            // TODO: Add insert logic here
            return();
        }
        catch
        {
            return View();
        }
    }
    //[HttpPost]
    //public ActionResult Index(SearchCriteria data)
    //{
    //    var data = this._resultsService.FindClaims(data);
    //    return View(data);
    //}
    [HttpPost]
    public ActionResult Index()
    {
        return View();

    }
    // GET: Search/Edit/5
    public ActionResult Edit(int id)
    {
        return View();
    }
    // POST: Search/Edit/5
    [HttpPost]
    public ActionResult Edit(int id, FormCollection collection)
    {
        try
        {
            // TODO: Add update logic here
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }
    // GET: Search/Delete/5
    public ActionResult Delete(int id)
    {
        return View();
    }
    // POST: Search/Delete/5
    [HttpPost]
    public ActionResult Delete(int id, FormCollection collection)
    {
        try
        {
            // TODO: Add delete logic here
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }
}
public static class DependencyFactory
{
    public static ISearchResultsService NewResultsService()
    {
        return new MockSearchResultsService();
    }
}
public interface ISearchResultsService
{
    List<Person> FindClaims(string firstName, string lastName);
}
public class MockSearchResultsService : ISearchResultsService
{
    public List<Person> FindClaims(string firstName, string lastName)
    {
        return new List<Person>(new []{new Person{FirstName = "John", LastName = "Doe"}});//throw new NotImplementedException();
    }
}
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

}

我建议您使用一些IoC容器,如http://autofac.org。你可以这样配置你的容器并注册你的服务:

builder.RegisterType<MockSearchResultsService>().As<ISearchResultsService>()

你所有的依赖项将被自动解析:

public class SearchController : Controller
{
    private readonly ISearchResultsService _resultsService;
    public SearchController(ISearchResultsService resultsService)
    {         
        _resultsService = resultsService;
    }
}

请注意,您可以使用许多IoC容器。尝试搜索更多关于AutoFacNinjectCastle Windsor

最新更新