Autofac + Serilog Issue - PullRequest
       30

Autofac + Serilog Issue

0 голосов
/ 25 сентября 2018

В моем проекте я использую 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

...