프로젝트 AutoFac에 사용 NET 코어 3.0

여전히 인터넷 Core3.0 정지 유지 보수에 천천히 이전 버전을 의미합니다 .NET 코어 3.1 릴리스로 큰 차이와 인터넷 코어 2.X.

넷 코어 3.0은 우리가 손을 연습하기위한, 실제로 이행 버전입니다.

ASP.NET 코어 2.2迁移到3.0 : https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio

ASP.NET 코어 3.0의 새로운 기능은 다음과 같습니다 https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-3.0?view=aspnetcore-3.0

AutoFac 서비스를 교체

닷넷 코어, 반환 IServiceProvider이 ConfigureServices 서비스에 주입 된 3.0 이전.

불평 닷넷 코어 3.0 프레임 워크 런타임을 사용 후 : System.IServiceProvider를 반환 ConfigureServices은 지원되지 않습니다.

보고 문서는 3.0 ConfigureServices을 발견 한 후 더 이상 반환 IServiceProvider를 지원하지 않습니다.

닷넷 코어 2.2 표현

        ///  <요약은> 
        /// 주입에 대한 책임 // 서비스
         ///  </ 요약> 
        ///  </ PARAM> <PARAM NAME = "서비스"> 
        ///  <리턴 A> </ 반환 A> 
        공공 IServiceProvider ConfigureServices ( 서비스 IServiceCollection) 
        { 
            // 초기화 컨테이너 
            VAR 빌더 = 새 새 ContainerBuilder ();
             // 체류 파이프 
            builder.Populate (서비스);
             // 프로그램의 경우 비즈니스 로직 조립 네임 스페이스 
            조립 = Assembly.Load 서비스 ( " NetCoreDemo.Service " ) ;
             // 계면 층 위치 조립체 네임
            리포지토리 = Assembly.Load 어셈블리 ( " NetCoreDemo.Repository " );
             // 자동 주입기 
            builder.RegisterAssemblyTypes (- 서비스, 리포지토리) 
                어디에요 (T => t.Name.EndsWith ( " - 서비스 " )) 
                .AsImplementedInterfaces (); 
            // 저장 가입, 모든 IRepository 저장소 인터페이스는지도로 
            builder.RegisterGeneric ( 대해서 typeof (저장소 <> ))
                 // 각 요청에 대한 새로운 객체를 생성; 기본 모드는, 각각의 호출은 객체 인스턴스화를 다시합니다 InstancePerDependency 
                .as 인을 ( 대해서 typeof 합니다 (IRepository <> )) InstancePerDependency ();
            // 구성된 
            ApplicationContainer = builder.Build ();
             // 도관 AutoFac에 다시 공급되는 
            리턴  새로운 새 AutofacServiceProvider (ApplicationContainer) 
        }

닷넷 코어 3.0 표현

수정  Program.cs의  기본 ServiceProviderFactory AutofacServiceProviderFactory로 지정

    공공  클래스 프로그램 
    { 
        공공  정적  무효 메인 ( 문자열 []에 args) 
        { 
            CreateHostBuilder (인수) .Build () 실행 ().; 
        } 

        공용  정적 IHostBuilder CreateHostBuilder ( 문자열 [] 인수) => 
            Host.CreateDefaultBuilder (인수) 
                 // 将默认ServiceProviderFactory指定为AutofacServiceProviderFactory 
                .UseServiceProviderFactory ( 새로운 AutofacServiceProviderFactory ()) 
                .ConfigureWebHostDefaults (webBuilder => 
                { 
                    webBuilder.UseStartup<시작> (); 
                    webBuilder.UseUrls ( " HTTP : // * : 8004 " ); 
                }); 
    }

이어서  Startup.cs가  첨가  ConfigureContainer의  방법

사용 ConfigureContainer 액세스 Autofac 컨테이너 발전기 및 Autofac에 직접 등록합니다.

        공공  무효 ConfigureContainer (ContainerBuilder 빌더) 
        { 
            // 비즈니스 로직 어셈블리 네임 스페이스 프로그램 
            조립 = Assembly.Load 서비스 ( " NetCoreDemo.Service을 " );
             // 여기서 프로그램 인터페이스 층 어셈블리 네임 스페이스 
            총회 저장소를 Assembly.Load = ( " NetCoreDemo .Repository " );
             // 자동 주입기 
            builder.RegisterAssemblyTypes (- 서비스, 리포지토리) 
                어디에요 (T => t.Name.EndsWith ( " - 서비스 " )) 
                .AsImplementedInterfaces (); 
            //는 저장 레지스터 저장소 IRepository 모든 인터페이스 지도 제작
            builder.RegisterGeneric ( 대해서 typeof (리포지토리 <> ))
                 // InstancePerDependency : 기본 모드는, 각 호출 객체 인스턴스화 다시 것이다 각 요청에 대한 새로운 객체 생성 
                .as 인 ( 대해서 typeof (IRepository <> ))을 InstancePerDependency. (); 
        }

참조 : https://docs.autofac.org/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting

추천

출처www.cnblogs.com/tenghao510/p/11984473.html