Posinformatique.aspnet.webforms.dependencyInjeção é uma biblioteca para adicionar o suporte do contêiner do IOC de Microsoft.Extensions.DependencyInjection for ASP .NET Web Forms
O Posinformatique.aspnet.webforms.dependencyInjection está disponível diretamente no site oficial do NUGET. Para baixar e instalar a biblioteca no seu projeto Visual Studio usando a seguinte linha de comando NUGET
Install-Package PosInformatique.AspNet.WebForms.DependencyInjection
Depois de adicionar o pacote Posinformatique.aspnet.webforms.DependencyInjection no seu projeto ASP .NET WebForms Ligue para o AddServiceCollection as seguintes linhas no Application_Start da sua classe HttpApplication no código Global.asax.cs atrás:
public class Global : HttpApplication
{
protected void Application_Start ( Object sender , EventArgs e )
{
ServicesConfig . RegisterServices ( this . AddServiceCollection ( ) ) ;
// Code that runs on application startup
RouteConfig . RegisterRoutes ( RouteTable . Routes ) ;
BundleConfig . RegisterBundles ( BundleTable . Bundles ) ;
}
} Na pasta App_Start adicione uma nova classe estática chamada ServicesConfig , que permite registrar os serviços usando o Microsoft.Extensions.DependencyInjection.ServiceCollection :
namespace PosInformatique . AspNet . WebForms . DependencyInjection . IntegrationTests
{
using System ;
using System . Collections . Generic ;
using System . Collections . ObjectModel ;
using System . Linq ;
using Microsoft . Extensions . DependencyInjection ;
public static class ServicesConfig
{
public static void RegisterServices ( IServiceCollection serviceCollection )
{
serviceCollection . AddSingleton < IDogRepository , DogRepository > ( ) ;
serviceCollection . AddTransient < IDogManager , DogManager > ( ) ;
}
}
}Você pode registrar serviços em um escopo transitório ou singleton . Diferentemente do ASP .NET Core, Posinformatique.aspnet.webforms.dependencyinjejection não suporta serviços de escopo com escopo que existam durante a vida útil da solicitação HTTP.
Se no seu aplicativo ASP .NET, você hospeda a infraestrutura do núcleo do ASP .NET (usando a biblioteca Posinformatique.aspnetCore.server.aspnet, por exemplo), você pode reutilizar o IServiceProvider e o mesmo IServiceCollection .
No exemplo a seguir, mostre como reutilizar o IServiceProvider interno e IServiceCollection aplicativo ASP .NET Core Hospedado no ASP .NET usando a biblioteca posinformatique.aspnetcore.server.aspnet:
public class Global : System . Web . HttpApplication
{
protected void Application_Start ( object sender , EventArgs e )
{
var host = WebHost . CreateDefaultBuilder ( )
. UseAspNet ( options =>
{
options . Routes . Add ( "api" ) ;
options . Routes . Add ( "swagger" ) ;
} )
. ConfigureServices ( services =>
{
// Add the default ASP .NET non-core services
// in the IServiceCollection of ASP .NET core.
services . AddDefaultAspNetServices ( this ) ;
} )
. UseStartup < Startup > ( )
. Start ( ) ;
// Reuse the built IServiceProvider of ASP .NET Core WebHost inside
// the ASP .NET non-core infrastructure to use IoC feature.
this . UseServiceProvider ( host ) ;
}
} O método AddDefaultAspNetServices() permite adicionar o serviço de infraestrutura não-core ASP .NET como o HttpRequest ou HttpContext na IServiceCollection , que estará disponível no IServiceProvider construído pela infraestrutura do núcleo do ASP .NET.
O método UseServiceProvider() permite configurar a infraestrutura não-core ASP .NET para usar a implementação do IServiceProvider , que é construído pelo IWebHost da infraestrutura do núcleo do ASP .NET.
Com essa abordagem, os componentes do ASP .NET não-core e do núcleo compartilharão o mesmo serviço. Por exemplo, se você registrar um serviço IDogManager como Singleton nos Serviços do ASP .NET Core, a instância do serviço IDogManager estará disponível e a mesma instância :
Por padrão, o contêiner Microsoft.Extensions.DependEncyInjeção de injeção de dependência usará qualquer construtor que corresponda aos parâmetros do controle ou serviço para instanciar. Na versão 2.1 do Microsoft.Extensions.DependencyInjection Library, a Microsoft introduziu um novo atributo ActivatorUtitiesConstructorAtAttribute, que permite forçar o IServiceProvider do Microsoft.Extensions.DependencyInject Library a chamar explicitamente o construtor decorado.
A versão 1.2.0 da biblioteca Posinformatique.aspnet.webforms.dependencyInjection Adicione o suporte do atributo ActiveatorutilityConstrucTorattribute, mesmo tecnicamente, esse atributo não é adicionado pelo compilador ASP .NET nas vistas ASPX e ASCX geradas.
Por exemplo, imagine que você tem o seguinte controle do usuário:
public partial class UserControlWithDependency : System.Web.UI.UserControl
{
private readonly IDogManager dogManager;
[ActivatorUtilitiesConstructor] // Will be call by the IServiceProvider of the Microsoft.Extensions.DependencyInjection library.
public UserControlWithDependency(IDogManager dogManager)
{
this.dogManager = dogManager;
}
public UserControlWithDependency()
{
}
}
Quando o aplicativo é carregado, o compilador ASP .NET gera o seguinte código que não adicionará o atributo ActivatorUtitiesConstructorattribute nos construtores associados:
public class usercontrolwithdependency_ascx : UserControlWithDependency
{
...
[DebuggerNonUserCode]
public usercontrolwithdependency_ascx()
{
__Init();
}
[DebuggerNonUserCode]
public usercontrolwithdependency_ascx(IDogManager dogManager)
: base(dogManager)
{
__Init();
}
...
}
O código gerado anterior não pode ser usado corretamente pela biblioteca Microsoft.Extensions.DependencyInjection para chamar o construtor certo com base no ativadorConstructorattribute.
Na versão 1.2.0 , o posinformatique.aspnet.webforms.DependencyInjeção Adicione o suporte completo do ativadorConstructUrtribute, adicione virtualmente o atributo por reflexão na classe gerada pelo compilador ASP .NET.
Ao alterar o construtor do usuário controla e controla para injetar dependências usando o httpruntime.webobjectActivator, a mensagem a seguir pode aparecer ao adicionar esses controles a uma página ou outro usuário controles:
Elemento 'xxxxx' não é um elemento conhecido. Isso pode ocorrer se houver um erro de compilação no site ou o arquivo web.config estiver faltando .

Nesse caso, muitos erros/avisos de falsificação podem ser levantados pelo Visual Studio (mas o aplicativo pode compilar com sucesso).

Além disso, o IntelliSense para o código ASPX para editar as propriedades dos controles adicionados não funciona ...
Esta é uma questão conhecida do Visual Studio e da Microsoft Seam para levar em consideração ...
Há uma solução alternativa, que é fornecida com o pacote Posinformatique.aspnet.webforms.dependencyinjejection, adicionando um construtor sem parâmetro no controle:
public partial class UserControlWithDependency : System . Web . UI . UserControl
{
private readonly IDogManager dogManager ;
[ ActivatorUtilitiesConstructor ] // It is import to set this attribute to be sure this constructor will be called by the Microsoft.Extensions.DependencyInjection.
public UserControlWithDependency ( IDogManager dogManager )
{
this . dogManager = dogManager ;
}
// Avoid the errors and the warnings in the Visual Studio ASPX code designer
public UserControlWithDependency ( )
{
}
protected void Page_Load ( object sender , EventArgs e )
{
this . doggoList . DataSource = this . dogManager . GetDogs ( ) ;
this . doggoList . DataBind ( ) ;
}
}Observações : você também deve adicionar o ativadorConstructRittion no construtor que requer os serviços registrados no contêiner Microsoft.Extensions.Dependencyinjeject. Sem esse atributo, o construtor sem parâmetro pode ser usado durante a execução do aplicativo com o comportamento padrão do Microsoft.Extensions.DependencyInjection.
Não hesite em clonar meu código e enviar algumas mudanças ... é um projeto de código aberto, para que todos sejam bem -vindos para melhorar essa biblioteca ... A propósito, eu sou francês ... então talvez você comente que meu inglês não seja realmente fluente ... então não hesite em consertar minhas seqüências de recursos ou minha documentação ... Merci!
Quero agradecer à Dilitrust Company a testar e me deu o feedback desta biblioteca por seus aplicativos ASP .NET WebForms.