【发布时间】:2015-07-05 04:52:50
【问题描述】:
在 global.asax.cs 中的简单测试注册:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//This allows interfaces etc to be provided as parameters to action methods
ModelBinders.Binders.DefaultBinder = new DiModelBinder();
//Now call the method to initialise anything that is required before startup (which includes setting up DI)
WebUiInitialise.InitialiseThis(this);
var builder = new Autofac.ContainerBuilder();
builder.RegisterApiControllers(System.Reflection.Assembly.GetExecutingAssembly());
builder.RegisterModule(new ServiceLayer.Startup.ServiceLayerModule());
var container = builder.Build();
System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
}
测试 apicontroller:
public class TestController : ApiController
{
public TestController(IListService service)
{
}
[HttpGet]
public IQueryable<AspNetUser> Users(IListService service)
{
return null;
//return service.GetAll<AspNetUser>();
}
}
调试到TestController构造函数时,IListService服务有值,但调试到Users HttpGet方法时为null。
有没有办法解决 Web Api 控制器、get 和 post 方法的依赖关系(IListService 服务),而不仅仅是构造函数?
对于 MVC 控制器,方法解析,而不仅仅是构造函数。
【问题讨论】:
-
您的实际问题是什么?
-
你可以试试这样注册类型吗 -
builder.RegisterType<ServiceLayer.Startup.ServiceLayerModule>().As<IListService>(); -
Autofac 似乎不适用于 apicontroller 方法用户。调试到该方法时未解析 IListService 服务。我试过 builder.RegisterType
().As ();那没有用。