1

Company エンティティを管理するための単純な Web API コントローラーを作成しています。Ninject を使用して依存関係を管理するサービス クラス (リポジトリを呼び出す) に移動することにより、コントローラーからすべてのロジックを移動しようとしています。Delete アクションで HttpResponseMessage オブジェクトを返す必要があるまでは、すべてうまくいきました。Request オブジェクトで "Cannot Resolve Symbol 'Request'" というエラーが表示され続けます

コントローラーではないファイル内の Request オブジェクトを操作する (またはコンテキストを取得する) にはどうすればよいですか?

CompanyController.cs

public class CompanyController : ApiController
{
    private ICompanyService _companyService;

    public CompanyController(ICompanyService companyService)
    {
        _companyService = companyService;
    }

     // DELETE api/CompTest/5
    public HttpResponseMessage DeleteCompany(int id)
    {
        return _companyService.Delete(id);
    }
}

CompanyService.cs

 public class CompanyService : ICompanyService
  {
    public readonly IUnitOfWork _unitOfWork ;
    private readonly ICompanyRepository _companyRepository;

    public CompanyService(IUnitOfWork unitOfWork, ICompanyRepository companyRepository)
    {
        _unitOfWork = unitOfWork;
        _companyRepository = companyRepository;
    }

    public HttpResponseMessage Delete(int id)
    {
        var company = _companyRepository.GetCompanyById(id);

        if (company == null)
        {
          //ERROR HERE
          return Request.CreateResponse(HttpStatusCode.NotFound);
        }

        _companyRepository.Delete(company);

        try
        {
            _companyRepository.Save();
        }
        catch (DbUpdateConcurrencyException ex)
        {
            //ERROR HERE
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
        }

        //ERROR HERE
        return Request.CreateResponse(HttpStatusCode.OK, company);
    }
}
4

2 に答える 2

1

コントローラーの外部 (つまり、サービス クラス内) のオブジェクトにアクセスする場合Requestは、HttpContextBase クラスを使用できます。

public class CompanyService: ICompanyService
{
   private readonly HttpContextBase _context;

   public CompanyService(HttpContextBase context)
   {
      _context = context;      
   }

   public HttpResponseMessage Delete(int id)
   {
       _context.Request ....
   }
}

Ninject は、この HttpContextBase 依存関係を HttpContextWrapper オブジェクトで自動的に解決します。ninject では、CompanyService バインディングのみを追加する必要があります。

于 2013-03-28T18:18:20.243 に答える
1

クロンプリンツさん、あなたのサービスは別の層に属しています - それは HttpRequests/Responses について何も知らないはずです。たとえば、WinForm / WPF または Web アプリケーションで再利用される可能性があります。操作を実行できない場合は、例外をスローしてコントローラーで処理し、適切な HttpResponseMessage を作成します。

于 2013-03-28T18:21:52.447 に答える