0

我不确定我这样做是否正确。我有一个名为 Project.Services 的项目,其中包含我的 MVC 应用程序中的控制器利用的一堆服务。

在将服务项目暴露给 Web 项目方面 - 我在我的 Web 项目中定义了一个名为“IProjectServices”的接口,其中包含一堆与我需要的对应的空白方法。

然后我尝试使用类似的语法在服务项目中实现这个接口

public class ProjectServices : IProjectServices

我现在收到“无法解决 IProjectServices”错误 - 在我开始深入研究之前,我是否在这里正确使用了接口?

我在想 web 项目说“嘿,我需要某种服务,但我不想直接依赖于服务项目,所以我将创建一个界面”,然后服务项目说“嘿没问题我'会实现它,但也许另一个项目(如测试)将来会以不同的方式实现它,所以我们不会紧密耦合”。我想对了吗?

4

1 回答 1

2

这是使用 Unity 的示例实现。我希望这有帮助。

从控制器向后工作...

MVC 项目:DashboardController.cs

public class DashboardController : Controller
{
    private readonly IDashboardService dashboardService;

    public DashboardController(IDashboardService dashboardService)
    {
        this.dashboardService = dashboardService;
    }

    [HttpGet]
    public ActionResult Index()
    {
        var model = this.dashboardService.BuildIndexViewModel();

        return this.View(model);
    }
}

MVC 项目:Global.asax

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        // Standard MVC setup
        // ...

        // Application configuration 
        var container = new UnityContainer();
        new AppName.Services.UnityBootstrap().Configure(container);
    }
}

服务项目:DashboardService.cs

public class DashboardService : IDashboardService
{
    // ctor
    // ...

    public IndexViewModel BuildIndexViewModel()
    {
        var currentPerformanceYear = this.repository.GetMaxPerformanceYear().PerformanceYearID;
        var staff = this.repository.GetStaffBySamAccountName(this.currentUser.Identity.Name);

        var model = new IndexViewModel
        {
            StaffName = staff.FullName,
            StaffImageUrl = staff.StaffImageUrl,
            // ...
        };

        return model;
    }
}

服务项目:IDashboardService.cs

public interface IDashboardService
{
    IndexViewModel BuildIndexViewModel();
}

服务项目:UnityBootstrap.cs

public class UnityBootstrap : IUnityBootstrap
{
    public IUnityContainer Configure(IUnityContainer container)
    {
        return container.RegisterType<IDashboardService, DashboardService>()
                        .RegisterType<ISharePointService, SharePointService>()
                        .RegisterType<IStaffService, StaffService>();
    }
}

公司企业图书馆实用程序项目:IUnityBootstrap.cs

public interface IUnityBootstrap
{
    IUnityContainer Configure(IUnityContainer container);
}
于 2013-02-19T11:05:38.077 回答