首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以将Autofac配置为与ASP.NET MVC和ASP.NET Web Api一起使用

是否可以将Autofac配置为与ASP.NET MVC和ASP.NET Web Api一起使用
EN

Stack Overflow用户
提问于 2012-07-14 23:20:00
回答 2查看 15.9K关注 0票数 59

有没有可能配置Autofac与ASP .NET MVC和ASP .NET网页Api一起工作。我知道依赖解析器是不同的。但在使用文档记录的方法时,我只能设置一个全局解析器。

// Set the dependency resolver implementation.
GlobalConfiguration.Configuration.DependencyResolver = resolver;

这种方法是不是一个好主意?我是否应该将我的解决方案分成两个项目,并分别处理每个项目的依赖注入?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-16 21:22:12

当然,可以将Autofac配置为同时使用MVC和Web API。预计这将是一个非常常见的场景。有两种独立的依赖关系解析器实现,因为MVC和Web API可以彼此独立使用。Autofac集成也是如此。

当在同一个应用程序中同时使用MVC和Web API时,每个应用程序都需要自己的依赖关系解析器,尽管它们可以与容器的相同实例一起提供。

var builder = new ContainerBuilder();

// Add your registrations

var container = builder.Build();

// Set the dependency resolver for Web API.
var webApiResolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = webApiResolver;

// Set the dependency resolver for MVC.
var mvcResolver = new AutofacDependencyResolver(container);
DependencyResolver.SetResolver(mvcResolver);

也可以在两者之间共享注册,因为InstancePerApiRequestInstancePerHttpRequest生命周期作用域现在共享相同的标记。

请注意,为Web API和MVC设置依赖项解析器的机制是不同的。Web API使用GlobalConfiguration.Configuration.DependencyResolver,MVC使用DependencyResolver.SetResolver

票数 97
EN

Stack Overflow用户

发布于 2012-07-15 15:02:24

一定要把它们分开。Autofac同时具有ASP.NET MVCASP.NET Web API集成。情况并不总是如此,但如果您在两个应用程序中都需要相同的服务,则很可能是应用程序架构出了问题。

下面是如何使用ASP.NET Web API实现这一点:

internal class AutofacWebAPI {

    public static void Initialize(HttpConfiguration config) {

        config.DependencyResolver = new AutofacWebApiDependencyResolver(
            RegisterServices(new ContainerBuilder())
        );
    }

    private static IContainer RegisterServices(ContainerBuilder builder) {

        builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).PropertiesAutowired();

        //deal with your dependencies here
        builder.RegisterType<CarsService>().As<ICarsService>();
        builder.RegisterType<CarsCountService>().As<ICarsCountService>();

        return builder.Build();
    }
}

然后,在Global.asax.cs内部注册如下所示:

AutofacWebAPI.Initialize(GlobalConfiguration.Configuration);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11484904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档