Я переношу веб-форму (а не технологию WebForm, урезанное веб-приложение в функциональность веб-формы) из ASP.NET MVC в ASP.NET Core MVC. Моя самая большая проблема - это статический класс, который у нас был в предыдущей версии веб-формы. Этот статический класс использует пакеты, которые были доступны в .NET, но не в .NET Core.Как перенести статический класс с .NET на .NET Core?
Я понимаю, что для некоторых методов в этом статическом классе я должен использовать инъекцию зависимостей для решения проблем с пакетом. Тем не менее, невозможно передать параметр статическому классу, что делает это «антипаттерн» для .NET Core.
Мой статический класс Utils.cs имеет только два метода: RenderPartialToString
и SendEmail
. SendEmail
очень прост и не имеет проблем с текущими пакетами .NET Core. Однако у меня есть следующий код в моем статическом классе, который не работает с текущей версией.
public static class Utils
{
public static readonly string ApiUrl = ConfigurationManager.AppSettings["ApiUrl"];
public static readonly string ApiKey = ConfigurationManager.AppSettings["ApiKey"];
public static string RenderPartialToString(Controller controller, string viewName, object model)
{
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return "document.write('" + sw.GetStringBuilder().Replace('\n', ' ').Replace('\r', ' ').Replace("'","\\'").ToString() + "');";
}
}
...
}
ViewEngine и ConfigurationManager не доступны в .NET Ядро делает этот статический класс очень трудно перенести. Я считаю, что я мог бы реализовать обе эти функции с помощью инъекции зависимостей. Однако я не знаю, как изменить этот статический класс, чтобы я мог использовать инъекцию зависимостей и иметь возможность использовать эти методы в моих контроллерах.
Как я могу просто перенести этот статический класс в .NET Core для какой-либо реализации инъекции зависимостей? Мне нужно изменить все экземпляры класса Utils и сделать его не статическим?
Э-э-э-э-э-э-эй? msgstr "приложение веб-формы из ASP.NET MVC ..."? ASP.NET MVC - это другая технология, чем ASP.NET (aka WebForms). – Tseng
См. Http://stackoverflow.com/questions/31905624/where-are-the-controllercontext-and-viewengines-properties-in-mvc-6- контроллер для части ViewEngine.Для ConfigurationManager вам нужно «IOption» https://docs.asp.net/en/latest/fundamentals/configuration.html –
Kalten
@Tseng Извините, что не уточнил, это урезанное веб-приложение с использованием MVC (а не WebForms). Следовательно, это не технология WebForm. –