Я довольно новичок в .NET (я из экосистемы Java EE), и у меня есть следующие сомнения. В проект, над которым я работаю, у меня есть класс контроллера, расширяющий абстрактный класс ApiController :
public class MailProtocolloController : ApiController
{
private String urlBaseProtocolloApi = "http://XXX.westeurope.cloudapp.azure.com:8080";
private NetworkCredential myCreds;
private CredentialCache credCache;
public MailProtocolloController()
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext.Current);
using (var contextCurrentUser = spContext.CreateUserClientContextForSPHost())
{
PecMailAdminContext dbContext = new PecMailAdminContext();
Casella casella = Casella.GetCasellaFromSito(dbContext, spContext.SPHostUrl.ToString());
string userServizio = casella.Username;
string passwordUserServizio = MailManagerUtilities.Utils.Decrypt(casella.Password);
credCache = new CredentialCache();
}
}
..........................................................................................................
..........................................................................................................
..........................................................................................................
}
Как вы можете видеть из предыдущего кода, я извлекаю информацию о конкретном пользователе непосредственно в конструктор (это должно быть первым делом, потому что тогда эти пользователи будут использоваться во всех запросах обработки метода контроллера для выполнения внешнего HTTP-запрос к внешнему WS.
Я думаю, что сделать это в конструкторе довольно ужасно, потому что конструктор должен только устанавливать значения переменных из параметров и не должен реализовывать настоящую логику.
Так что я подумывал перевести этот логику в метод инициализации. Я знаю, что теоретически мой класс контроллера должен реализовывать интерфейс BaseController , а затем реализовывать этот метод инициализации, который будет содержать следующую логику:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
// RETRIEVE THE SERVICE USER HERE
}
Проблема в том, что я пытался сделать что-то вроде этого:
public class MailProtocolloController : ApiController, BaseController
{
......................................................
......................................................
......................................................
}
но Visual Studio выдает ошибку при объявлении этого BaseController в объявлении метода, ошибка:
Не удалось найти тип или имя пространства имен BaseController (есть
Вы пропустили директиву по использованию или ссылку на сборку?).
Я не могу импортировать это определение интерфейса.
В чем проблема? Что мне не хватает? Как я могу попытаться исправить это или использовать метод инициализации другим способом в моем контроллере?