【发布时间】: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