如何使用 Autofac 属性Autowired() 进行依赖注入,如果 Web 应用程序同时具有 Mvc 和 WebA

本文关键字:应用程序 Web 如果 WebA Mvc 注入 Autowired 属性 Autofac 何使用 依赖 | 更新日期: 2023-09-27 18:35:40

我有一个同时包含 MvcWebApi 控制器的 Web 应用程序(1 个项目)。我正在尝试使用PropertiesAutoWired()注入Autofac的依赖项。我的 Mvc 控制器的属性正在注入,但 WebAPI 控制器的属性没有。

这是我的代码:

Global.asax:

protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        Logger.Logger.Initialize(Server.MapPath(string.Empty));
        DependencyResolver.SetResolver(DependencyInjector.GetDependencyResolver(Assembly.GetExecutingAssembly()));
    }

依赖注入器:

public static IDependencyResolver GetDependencyResolver(Assembly applicationAssembly)
    {
        var builder = new ContainerBuilder();
        builder.RegisterControllers(applicationAssembly).PropertiesAutowired(); //Mvc Controllers
        builder.RegisterApiControllers(applicationAssembly).PropertiesAutowired(); //Api Controllers
        DIContainer = RegisterServices(builder);

        return new AutofacDependencyResolver(DIContainer);
    }

注册方式如下:

builder.RegisterType<Concrete>()
                .As<Abstraction>()
                .PropertiesAutowired()
                .EnableInterfaceInterceptors()
                .InterceptedBy(typeof(LogInterceptor))
                .InstancePerLifetimeScope();

每个控制器都定义了属性:

public class TestController : ApiController
{
    public ITestComponent TestComponent { get; set; }
}

如何使用 Autofac 属性Autowired() 进行依赖注入,如果 Web 应用程序同时具有 Mvc 和 WebA

未设置 WebAPI 的依赖项解析程序。请点击链接获取解决方案。

Autofac - MVC 控制器和 Web API 控制器的依赖注入