В моем проекте я использую Autofac (MVC + WebApi) с Serilog.У меня есть Google, но на удачу.В моем домашнем контроллере я получаю «Не определен конструктор без параметров для этого объекта».Любой совет
Пожалуйста, помогите мне найти проблему.Я новичок в обеих технологиях
public class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureLogging();
var builder = new ContainerBuilder();
var config = new HttpConfiguration();
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
// Web API configuration and services - Dependency Injection
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterSource(new ViewRegistrationSource());
builder.RegisterType<Log.Logger>.As<ILogger>();
builder.RegisterInstance(Log.Logger).AsImplementedInterfaces();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(config);
app.UseWebApi(config);
}
private static void ConfigureLogging()
{
bool serilogEnabled;
bool.TryParse(WebConfigurationManager.AppSettings["SERILOG:SerilogEnabled"], out serilogEnabled);
if (serilogEnabled)
{
int retainedFileCountLimit;
if (!int.TryParse(WebConfigurationManager.AppSettings["SERILOG:RetainedFileCountLimit"], out retainedFileCountLimit))
retainedFileCountLimit = 10;
var logFilePath = WebConfigurationManager.AppSettings["SERILOG:LogFilePath"];
if (!logFilePath.EndsWith("\\"))
logFilePath += "\\";
var host = Environment.MachineName;
var serilogUrl = WebConfigurationManager.AppSettings["SERILOG:SeqUrl"] ?? "http://localhost:15900";
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.Enrich.WithProperty("Host", host)
.Enrich.FromLogContext()
.WriteTo.RollingFile((logFilePath + host + "-abc-log-{Date}.txt"), retainedFileCountLimit: retainedFileCountLimit)
.WriteTo.Seq(serilogUrl)
.CreateLogger();
}
Logger = Log.Logger;
}
}
public class HomeController : Controller
{
protected readonly ILogger Logger;
public HomeController(ILogger logger)
{
Logger = logger;
}
}
Ошибка
[MissingMethodException: для этого объекта не определен конструктор без параметров.] System.RuntimeTypeHandle.CreateInstance (тип RuntimeType, логический тип publicOnly,Boolean noCheck, Boolean & canBeCached, RuntimeMethodHandleInternal & ctor, Boolean & bNeedSecurityCheck) + 0
System.RuntimeType.CreateInstanceSlow (логический publicOnly, логический skipCheckThis, логический BooleCleckskipCheckThis, Boolean fillCache, StackCrawlMark & stackMark) +232 System.Activator.CreateInstance (тип типа, логический непубличный тип) +83 System.Activator.CreateInstance (тип тип) +11 System.Web.Mvc.DefaultControllerActivtetextTextateCateTateTateTateTateTateTateTateTateTateTateTateTateTectext.CateCateTateTateTateTateTateTateTateTecteteCtext.TextTextEttextTextText.Ectectectect) .Catetext.TextTateCate.TextEctect.) + 55
[InvalidOperationException: произошла ошибка при попытке создать контроллер типа «DET.PRISM.FISO.Web.App.Controllers.HomeController».Убедитесь, что у контроллера есть открытый конструктор без параметров.]
System.Web.Mvc.DefaultControllerActivator.Create (RequestContext requestContext, Type controllerType) + 178
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance requestContext, RequestContetecontrollerType) + 76
System.Web.Mvc.DefaultControllerFactory.CreateController (RequestContext requestContext, String controllerName) + 88
System.Web.Mvc.MvcHandler.ProcessRequestInit (HttpContextBase http & Контроллер системы управления контентом + контекста).Web.Mvc.MvcHandler.BeginProcessRequest (HttpContextBase httpContext, обратный вызов AsyncCallback, состояние объекта) + 50
System.Web.Mvc.MvcHandler.BeginProcessRequest (HttpContext httpContext, системный вызов 101Context http.text http.text + *).Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest (HttpContext context, AsyncCallback cb, Object extraData) + 16
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +103 System.Web.HttpApplication.ExecuteStepImpl (шаг IExecutionStep) +48 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение * complete * * 10 * синхронно) + 159