私はこのようなModuleControllerを持っています。 (ASP Web APIコントローラ)。asp.net mvcでBaseControllerを追加するとエラーが発生します
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Web.Http;
using AMMS.Logger;
using AMMS.Logger.Interfaces;
namespace AMMS.Api.Controllers
{
public class BaseController : ApiController
{
private readonly ILoggerService _loggerService;
public BaseController(ILoggerService loggerService)
{
_loggerService = loggerService;
}
protected virtual bool OnError(string actionName, MethodInfo methodInfo, Exception exception)
{
_loggerService.LogInfo($"Exception : {exception}, MethodInfo : {methodInfo}, actionName: {actionName}");
return false;
}
}
}
次に、このBaseController
を継承するために私のModuleControllerを変更:私はこのようBaseControllerを追加したすべてのControllers.Soに共通する機能を追加したいusing System.Collections.Generic;
using System.Web.Http;
using AMMS.Logger.Interfaces;
using AMMS.Service.Interfaces;
using AMMS.Service.Models;
namespace AMMS.Api.Controllers
{
public class ModuleController: ApiController
{
private readonly IModuleService _moduleService;
public ModuleController(IModuleService moduleService)
{
_moduleService = moduleService;
}
public List<AmmsModule> Get(string userId)
{
return _moduleService.GetModules(userId);
}
}
}
が(それは正常に動作しています)
using System.Collections.Generic;
using System.Web.Http;
using AMMS.Logger.Interfaces;
using AMMS.Service.Interfaces;
using AMMS.Service.Models;
namespace AMMS.Api.Controllers
{
public class ModuleController: BaseController
{
private readonly IModuleService _moduleService;
private readonly ILoggerService _loggerService;
public ModuleController(IModuleService moduleService, ILoggerService loggerService) : base(loggerService)
{
_moduleService = moduleService;
_loggerService = loggerService;
}
public List<AmmsModule> Get(string userId)
{
return _moduleService.GetModules(userId);
}
}
}
ただし、BaseControllerを追加した後、モジュールを読み込むことができません。 デバッグするとき、ModuleControllerのコードが実行されていないようです。 !クライアント側で 私が取得 -
は、リソースの読み込みに失敗しました:サーバーは500 (内部サーバーエラー)の状態で応答し
をこの理由ことができるもの(ただBaseControllerを追加した後は、コードはまったく実行されません)。
おそらくあなたは、このBaseControllerとModuleControllerの両方にthe_loggerServiceプロパティを宣言しているので?内部にBaseControllerでthe_loggerServiceの可視性を変更してみてください、あなたの派生クラスでは全く_loggerServiceに触れるべきではありませんModuleController – bolt19
から_loggerServiceプロパティを削除し、代わりに、基本クラスのコンストラクタを呼び出します。 –
ありがとう、それは働いた!内部に変更@JohnM –