gpt4 book ai didi

asp.net - Autofac 和 WebAPI - 默认构造函数错误

转载 作者:行者123 更新时间:2023-12-02 12:13:20 26 4
gpt4 key购买 nike

我有一个 Webforms 项目,但正在使用 WebAPI 来提供 Web 服务。我正在尝试实现 Autofac。我得到:

'MyController' does not have a default constructor

根据 Autofac 文档,我的配置是正确的,但显然存在问题。我正在使用 Visual Studio 2010/.Net 4。这是我的 Application_Start

private void Application_Start(object sender, EventArgs e)
{
//This enables api controllers in a separate class library
GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), new AssembliesResolver());

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

//Elmah for webapi
GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);

var builder = new ContainerBuilder();

//Register DbContext
builder.RegisterType<MyDbContext>()
.As<IMyDbContext>()
.InstancePerRequest();

//Register service layer
var businessLayer = Assembly.GetExecutingAssembly();
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces();

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

var container = builder.Build();
_containerProvider = new ContainerProvider(container);

var webApiResolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = webApiResolver;

}

典型的 API Controller 如下所示:

 [Authorize]
public class MyController : ApiController
{
public IMyService context { get; set; }

public MyController(IMyService context)
{
this.context = context;
}

// GET api/dostuff
/// <summary>
/// Get a list of all dtos
/// </summary>
/// <returns></returns>
public IEnumerable<MyDto> Get()
{
try
{
return context.MyDtos.ToList();
}
catch (Exception ex)
{
var message = string.Format("{0} {1} HTTP/1.1 {2} Exception: {3}", Request.Method, Request.RequestUri, HttpStatusCode.MethodNotAllowed, ex.Message);
var errorMessage = new System.Web.Http.HttpError(message) { { "ErrorCode", 405 } };
throw new HttpResponseException(ControllerContext.Request.CreateErrorResponse(HttpStatusCode.MethodNotAllowed, errorMessage));
}
}
}

最佳答案

如果您的 api Controller 与您的 Web 项目位于不同的程序集中,那么您需要告诉 Autofac 在哪里可以使用 changning 找到您的 Controller :

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

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

这将指示 Autofac 扫描 MyController 的程序集,并注册所有 ApiController 派生类型(它在那里找到)。

关于asp.net - Autofac 和 WebAPI - 默认构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com