Skip to main content

integrate-autofac

Replace the default Microsoft DI provider with ABP's Autofac integration. USE FOR: AbpAutofacModule, UseAutofac on IHostBuilder / AbpApplicationCreationOptions, property injection and Castle interception. DO NOT USE FOR: implementing/debugging interceptors (use-interceptors-and-dynamic-proxy); registering/replacing/decorating services (register-and-replace-services); module lifecycle config (define-application-modules).

설치로 이동

소스 정보

저장소
abpframework/abp-skills
최근 소스 활동
2026년 7월 20일 03:24
감지된 SKILL.md 언어
영어
스타
18
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
integrate-autofac
description
Replace the default Microsoft DI provider with ABP's Autofac integration. USE FOR: AbpAutofacModule, UseAutofac on IHostBuilder / AbpApplicationCreationOptions, property injection and Castle interception. DO NOT USE FOR: implementing/debugging interceptors (use-interceptors-and-dynamic-proxy); registering/replacing/decorating services (register-and-replace-services); module lifecycle config (define-application-modules).
license
MIT
# Integrating Autofac with ABP ## When to Use - Replace the built-in Microsoft DI service provider in an ABP host. - Add the container prerequisite for ABP's Autofac/Castle dynamic proxies. - Enable ABP convention-based property injection for module assemblies. - Configure a non-hosted or test ABP application to use Autofac. ## When Not to Use - **Select, implement, or debug interceptors** — use use-interceptors-and-dynamic-proxy. - **Register, replace, expose, key, or decorate services** — use register-and-replace-services. - **Define module dependencies or lifecycle hooks generally** — use define-application-modules. ## Workflow ### 1. Depend on the Autofac module Add `Volo.Abp.Autofac` and declare the module dependency: ```csharp [DependsOn(typeof(AbpAutofacModule))] public class MyAppModule : AbpModule { } ``` `AbpAutofacModule` is intentionally thin. It depends on `AbpCastleCoreModule`, which supplies the Castle integration used by ABP interceptors. ### 2. Replace the host service provider For a generic/ASP.NET Core host, call ABP's `IHostBuilder` extension before adding the ABP application: ```csharp var builder = WebApplication.CreateBuilder(args); builder.Host .UseAutofac(); await builder.AddApplicationAsync<MyAppModule>(); ``` The extension creates a `ContainerBuilder`, exposes it through the service collection, and installs `AbpAutofacServiceProviderFactory` with `UseServiceProviderFactory(...)`. For `AbpApplicationFactory` or another direct ABP application creation path, use the creation options: ```csharp var application = await AbpApplicationFactory.CreateAsync<MyAppModule>(options => { options.UseAutofac(); }); ``` This overload adds a `ContainerBuilder` object accessor and registers the factory as `IServiceProviderFactory<ContainerBuilder>`. ### 3. Let the factory populate and build Autofac `AbpAutofacServiceProviderFactory.CreateBuilder` calls `ContainerBuilder.Populate(IServiceCollection)`. `CreateServiceProvider` builds the container and returns `AutofacServiceProvider`. During population, ABP conventions: - enable property injection for implementation types whose assemblies belong to the loaded module chain (`IAbpModuleDescriptor.AllAssemblies`), unless the class or property disables it; - run ABP service registration actions and attach configured interceptors; - preserve Microsoft DI service descriptors, lifetimes, and keyed-service exposure through the Autofac adapter. This skill stops at container setup. Use the dedicated sibling skills to define service registrations or interceptor selection. ### 4. Verify container access only after setup `services.GetContainerBuilder()` returns the registered builder. It throws `AbpException` with a message instructing callers to invoke `UseAutofac` when the builder is missing. Do not use this as the normal place for ABP service registration when `IServiceCollection` conventions are sufficient. ## Validation - Resolve `IServiceProvider` after startup and confirm it is backed by `AutofacServiceProvider`. - Confirm `services.GetContainerBuilder()` succeeds after `UseAutofac` and fails without it. - Resolve a conventionally registered type from an ABP module assembly and verify an injectable property is populated. - Run one existing intercepted ABP service through DI to confirm the container prerequisite is present; diagnose interceptor rules with use-interceptors-and-dynamic-proxy. - Build and start the host so the service-provider factory path is exercised, not merely compiled. ## Common Pitfalls - **Adding only `AbpAutofacModule`** — the module dependency does not replace the host service provider; also call the appropriate `UseAutofac()` overload. - **Calling the wrong overload for the startup model** — use `IHostBuilder.UseAutofac()` for hosted apps and `AbpApplicationCreationOptions.UseAutofac()` for direct application creation. - **Calling `UseAutofac()` after the service provider has already been built** — install the factory during host/application construction. - **Assuming Autofac makes every method interceptable** — proxy selection and virtual/interface rules belong to use-interceptors-and-dynamic-proxy. - **Using property injection as the default design** — constructor injection remains clearer for required dependencies; Autofac support only makes ABP property injection available.
GitHub에서 보기