【问题标题】:AutoFac MVC Web APIAutoFac MVC Web API
【发布时间】:2016-03-03 15:06:04
【问题描述】:

我有一个简单的 AutoFac 示例正在运行,但现在想将它应用到我的 web api 项目中,并在层之间进行正确的分隔。

我看到的问题是标准控制器 x“没有默认构造函数”,但我很难过,所以寻求建议..

我正在调用 RegisterApiControllers 以及 RegisterControllers..

这就是我的 DependencyInjectionContainer 中的内容

public static class DependencyInjectionContainer
{
    public static ContainerBuilder Builder;
    public static IContainer Container;

    public static void Init(Assembly mainAssembly)
    {
        Builder = new ContainerBuilder();
        var config = GlobalConfiguration.Configuration;

        RegisterTypes(mainAssembly);

        Container = Builder.Build();

        config.DependencyResolver = new AutofacWebApiDependencyResolver(Container);
        DependencyResolver.SetResolver(new AutofacDependencyResolver(Container));
    }

    private static void RegisterTypes(Assembly mainAssembly)
    {
        var roomBookingConnectionString = ConfigurationManager.ConnectionStrings["RoomBooking"].ConnectionString;

        Builder.RegisterControllers(mainAssembly);

        Builder.RegisterType<RoomRepository>().As<IRoomRepository>().WithParameter(new TypedParameter(typeof(string), roomBookingConnectionString));
        Builder.RegisterType<RoomService>().As<IRoomService>();

        Builder.RegisterApiControllers(mainAssembly);

        Builder.RegisterFilterProvider();
    }
}

我在我的 Global.asax.cs 中调用它

DependencyInjectionContainer.Init(typeof(MvcApplication).Assembly);

这里的一个重要假设是这是正确的......

Builder.RegisterApiControllers(mainAssembly);

编辑---------------------------------------------- ----------------------

我刚刚尝试将上述 2 种方法中的所有 DI 注册等移回 global.asax.cs 并且它有效!?!?

我认为这与“RegisterApiControllers”有关。我正在使用“typeof(MvcApplication).Assembly”将调用程序集传递给上述初始化方法。这有什么问题吗?

谢谢。

【问题讨论】:

  • 我想我有这个工作。我不确定,但我认为这是因为我有一个名为“DependencyInjection”的类,它与其他东西有某种冲突?

标签: dependency-injection asp.net-web-api2 autofac


【解决方案1】:

Autofac 使用 RegisterApiControllers 方法来定位控制器。

当您执行Builder.RegisterApiControllers(mainAssembly); 时,您确定 mainAssembly 参数是包含控制器的程序集吗?

无论如何,如果你有这种问题,你可以做这样的事情(假设你有一个名为 RoomBookingController 的控制器):

builder.RegisterApiControllers(typeof(RoomBookingController).Assembly);

这样 Autofac 将找到包含您的控制器的程序集,无论它在哪里。

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多