【问题标题】:WebApi 2 Controller Creation Fails ONLY ONCE A WEEK in ProductionWebApi 2 控制器创建在生产中每周仅失败一次
【发布时间】:2017-09-06 12:05:10
【问题描述】:

我们有一个 web api 2 服务。我使用 Unity 进行依赖注入,使用 Entityframework 进行 ORM。我在 Unity 中单独注册类,如下面的代码部分所示。每周,我都会收到此错误

尝试创建类型控制器时出错 'CashAccountFlowController'。确保控制器具有 无参数的公共构造函数。在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor 控制器描述符,类型 控制器类型)在 System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage 请求)在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext() 类型“Analytical.Controller.CashAccountFlowController”没有 System.Linq.Expressions.Expression.New(Type 类型)在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage 请求,类型控制器类型,Func`1& 激活器)在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor 控制器描述符,类型 控制器类型)

直到上周,我每周一都会收到这个错误。每个星期天晚上我们都会做 iisreset。但是这周我在星期二收到了这个错误。在剩下的日子里,它工作得很好。周末不使用此服务。

我的控制器:

public IHttpActionResult Post([FromBody] CashAccountContract cashAccountContract)

public CashAccountFlowController(IAnalyticalInformationService analyticalInformationService,
        IDtoDomainMapper dtoDomainMapper) : base(dtoDomainMapper)
    {
        _analyticalInformationService = analyticalInformationService;
    }

流程服务依次引用 UnitOfWork,然后 UnitOfWork 引用存储库。

Unity 依赖注入注册。

    private void Register()
    {


 //Register Repositories

_unityContainer.RegisterType<IEntityDomainMapper, EntityDomainMapper>();
        _unityContainer.RegisterType<AnalyticalServiceEntities, AnalyticalServiceEntities>();
        _unityContainer.RegisterType<DbContext, AnalyticalServiceEntities>();
        _unityContainer.RegisterType<IConversationRepository, ConversationRepository>(
            new HierarchicalLifetimeManager());
        _unityContainer.RegisterType<IAnalyticalRepository, AnalyticalRepository>(new HierarchicalLifetimeManager());
        _unityContainer.RegisterType<ICustomerRepository, CustomerRepository>(new HierarchicalLifetimeManager());
        _unityContainer.RegisterType<IBoxRepository, BoxRepository>(new HierarchicalLifetimeManager());
        _unityContainer.RegisterType<ICashAccountSeriLogRepository, CashAccountSeriLogRepository>(new HierarchicalLifetimeManager());
        _unityContainer.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());   



 //Register Services

_unityContainer.RegisterType<IAnalyticalInformationService, AnalyticalInformationService>(
         new HierarchicalLifetimeManager());

        _unityContainer.RegisterType<IAnalyticalDataOutstandingService, AnalyticalDataOutstandingService>(
         new HierarchicalLifetimeManager());
        _unityContainer.RegisterType<IAnalyticalIntradayService, AnalyticalIntradayService>(
         new HierarchicalLifetimeManager());
        _unityContainer.RegisterType<IUserService, UserService>(
         new HierarchicalLifetimeManager());   



 //Register Controllers

        _unityContainer.RegisterType<IDtoDomainMapper, DtoDomainMapper>();
        _unityContainer.RegisterType<ICashAccountFlowController, CashAccountFlowController>();

    }

之前,我尝试过 HierarchicalLifeTimeManager 和瞬态(如上),但没有一个对我没有帮助。

我无法在本地复制它。 您能否帮助我为什么它在生产中一周失败ONLY ONCE

提前致谢,

潘迪亚拉詹。

【问题讨论】:

    标签: c# entity-framework unity3d asp.net-web-api2


    【解决方案1】:

    您的某些构造函数做的超出了应有的范围,并在解析其父类型时导致错误。

    您需要查看可疑控制器 CashAccountFlowController 的依赖关系,并验证其对象图是否已完全解析且没有错误。

    当框架无法通过具有无法安全提供的依赖项的构造函数正确初始化控制器时,将返回该标准错误消息。

    请检查以确保图中对象的构造函数未执行可能导致在相关日期发生错误的逻辑。

    【讨论】:

    • 您好 NKosi,1。这是任何应用程序的典型场景,控制器 => 服务层 => 存储库 => EntityFramework DB 上下文。因此,当控制器初始化时,所有依赖项都被加载。你能帮我做些什么来避免这个问题。 2. 您能否推荐一些工具来检查和验证对象图是否完全解决且没有错误?
    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    相关资源
    最近更新 更多