【发布时间】: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