0

私がこれを正しく行っているかどうかはわかりません。Project.Servicesというプロジェクトがあり、MVCアプリケーションのコントローラーが利用する一連のサービスが含まれています。

サービスプロジェクトをWebプロジェクトに公開するという点で、「IProjectServices」と呼ばれるWebプロジェクトで定義されたインターフェイスがあり、必要なものに対応する一連の空白のメソッドがあります。

次に、次のような構文を使用して、サービスプロジェクトにこのインターフェイスを実装しようとします。

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 に答える