Posinformatique.aspnet.webforms.dependencyInction - это библиотека для добавления поддержки контейнера IOC Microsoft.extensions.dependencyInction для веб -форм ASP .NET
Posinformatique.aspnet.webforms.dependencyInction доступен непосредственно на официальном веб -сайте Nuget. Чтобы загрузить и установить библиотеку в свой проект Visual Studio, используя следующую командную строку Nuget
Install-Package PosInformatique.AspNet.WebForms.DependencyInjection
После добавления пакета posinformatique.aspnet.webforms.dependencyInction в вашем проекте ASP .NET Webforms вызовите AddServiceCollection Следующие строки в Application_Start вашего класса HttpApplication в коде Global.asax.cs позади:
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 ) ;
}
} В папке App_Start добавьте новый статический класс с именем ServicesConfig , который позволяет зарегистрировать службы, используя 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 > ( ) ;
}
}
}Вы можете зарегистрировать услуги с помощью переходного или синглтона . В отличие от ASP .NET CORE, posinformatique.aspnet.webforms.dependencyInction не поддерживает Scoped Scope Services, которые существуют в течение срока службы HTTP -запроса.
Если в вашем приложении ASP .NET вы принимаете инфраструктуру CORE ASP .NET CORE (например, используя библиотеку Posinformatique.aspnetcore.server.aspnet), вы можете повторно использовать IServiceProvider и IServiceCollection созданные внутренне, созданным вашим приложением ASP .NET Core Infrastructure, чтобы поделиться теми же сервисами (и те же экземпляры Singleton!) Между вашим приложением ASP .NET Core .NET .NET Core .NET.
Следующий пример, покажите, как повторно использовать внутреннюю IServiceProvider и IServiceCollection приложения ASP .NET Core, размещенное в ASP .NET с использованием библиотеки 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 ) ;
}
} Метод AddDefaultAspNetServices() позволяет добавлять неядимую инфраструктурную службу ASP .NET, такую как HttpRequest или HttpContext в IServiceCollection , которая будет доступна в IServiceProvider , построенной инфраструктурой ASP .NET Core.
Метод UseServiceProvider() позволяет настроить неядерную инфраструктуру ASP .NET для использования реализации IServiceProvider , которая создается IWebHost инфраструктуры Core .NET Core .NET.
При таком подходе неточные и основные компоненты ASP .NET будут использовать ту же услугу. Например, если вы зарегистрируете службу IDogManager как Singleton в Сервисах ASP .NET CORE, будет доступен экземпляр службы IDogManager и тот же экземпляр :
По умолчанию контейнер для инъекции зависимости Microsoft.extensions.EpectendencyInction впрыскивает любой конструктор, который соответствует параметрам управления или службы для создания экземпляра. В версии 2.1 в библиотеке Microsoft.extensions.EpectendencyInction Microsoft представила новый атрибут ActivatorUtielieliestiestiestiestiestiestiestiestiestiels, который позволяет заставлять IServiceProvider из библиотеки Microsoft.extensions.EpectendencyInction, чтобы явно назвать конструктор.
Версия 1.2.0 библиотеки posinformatique.aspnet.webforms.dependencyInction Добавьте поддержку атрибута ActivatorUtielielieliestielieliestielieliestiends.
Например, представьте, что у вас есть следующий контроль пользователя:
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()
{
}
}
Когда приложение загружается, компилятор ASP .NET сгенерирует следующий код, который не добавит атрибут ActivatorUTILITIONSCONSTRUCTORATTRIBTIBUT на связанных конструкторах:
public class usercontrolwithdependency_ascx : UserControlWithDependency
{
...
[DebuggerNonUserCode]
public usercontrolwithdependency_ascx()
{
__Init();
}
[DebuggerNonUserCode]
public usercontrolwithdependency_ascx(IDogManager dogManager)
: base(dogManager)
{
__Init();
}
...
}
Предыдущий сгенерированный код не может быть правильно использован библиотекой Microsoft.extensions.DependencyInction, чтобы вызвать правильный конструктор на основе ActivatorUtIledsConstructorattribute.
В версии 1.2.0 posinformatique.aspnet.webforms.dependencyInction Добавьте полную поддержку ActivatorUtielielieliestielieliessConstructorattribute, практически добавив атрибут путем отражения в классе, сгенерированном компилятором ASP .NET.
При изменении конструктора пользовательских элементов управления и элемента управления для внедрения зависимостей с использованием httpruntime.webobjectActivator, следующее сообщение может появиться при добавлении этих элементов управления на страницу или другие элементы управления пользователем:
Элемент 'xxxxx' не является известным элементом. Это может произойти, если на веб -сайте есть ошибка компиляции, или файл web.config отсутствует .

В этом случае множество ошибок/предупреждений подделки могут быть подняты Visual Studio (но приложение может успешно компилировать).

Кроме того, Intellisense для кода ASPX для редактирования свойств дополнительных элементов управления не работает ...
Это известная проблема Visual Studio и Microsoft Seam, чтобы принять участие в ...
Существует обходной путь, который обеспечивается пакетом posinformatique.aspnet.webforms.edependencyInction, добавив конструктор без параметра в элементе управления:
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 ( ) ;
}
}Замечания : вы также должны добавить ActivatorUtielieliestielielsConstructorattribute в конструктор, который требует, чтобы службы были зарегистрированы в контейнере Microsoft.extensions.EpectendenceInction. Без этого атрибута конструктор без параметра может использоваться во время выполнения приложения с поведением по умолчанию microsoft.extensions.epectendencyInction.
Не стесняйтесь клонировать мой код и отправить некоторые изменения ... это проект с открытым исходным кодом, поэтому все могут улучшить эту библиотеку ... кстати, я француз ... так что, возможно, вы замечаете, что мой английский не совсем свободно ... так что не стесняйтесь исправить свои строки ресурсов или мою документацию ... Merci!
Я хочу поблагодарить компанию Dileitrust, чтобы протестировать и дать мне отзывы об этой библиотеке для их приложений ASP .NET Webforms.