Adaptadores System.Web
O principal caso de uso dos adaptadores no repositório dotnet/systemweb-adapters é ajudar os desenvolvedores que têm uma dependência de tipos System.Web
dentro de suas bibliotecas de classes, pois desejam migrar para o ASP.NET Core.
Um recurso importante dos adaptadores é que os adaptadores permitem que a biblioteca seja usada de projetos do ASP.NET Framework e ASP.NET Core. Atualizar vários aplicativos do ASP.NET Framework para ASP.NET Core geralmente envolve estados intermediários em que nem todos os aplicativos foram totalmente atualizados. Usando os adaptadores System.Web
, a biblioteca pode ser usada de chamadores do ASP.NET Core e chamadores do ASP.NET Framework que não foram atualizados.
Vamos dar uma olhada em um exemplo usando os adaptadores que se movem do .NET Framework para o ASP.NET Core.
ASP.NET Framework
Considere um controlador que faça algo como:
public class SomeController : Controller
{
public ActionResult Index()
{
SomeOtherClass.SomeMethod(HttpContext.Current);
}
}
que, em seguida, tem lógica em um assembly separado passando esse HttpContext até que, finalmente, algum método interno realizar alguma lógica sobre ele, como:
public class Class2
{
public bool PerformSomeCheck(HttpContext context)
{
return context.Request.Headers["SomeHeader"] == "ExpectedValue";
}
}
ASP.NET Core
Para executar a lógica acima no ASP.NET Core, um desenvolvedor precisará adicionar o pacote Microsoft.AspNetCore.SystemWebAdapters
, que permitirá que os projetos funcionem em ambas as plataformas.
As bibliotecas precisariam ser atualizadas para entender os adaptadores, mas será tão simples quanto adicionar o pacote e recompilar. Se essas forem as únicas dependências que um sistema tem no System.Web.dll
, as bibliotecas poderão direcionar o .NET Standard 2.0 para facilitar um processo de criação mais simples durante a migração.
O controlador no ASP.NET Core agora terá esta aparência:
public class SomeController : Controller
{
[Route("/")]
public IActionResult Index()
{
SomeOtherClass.SomeMethod(HttpContext);
}
}
Observe que, como há uma propriedade HttpContext, eles podem passar por isso, mas geralmente têm a mesma aparência. Usando conversões implícitas, o HttpContext pode ser convertido no adaptador que pode ser passado pelos níveis que utilizam o código da mesma maneira.