C# Unity依赖项注入在特定时间后自动过期。。为什么?

C# Unity依赖项注入在特定时间后自动过期。。为什么?,c#,dependency-injection,asp.net-web-api2,unity-container,C#,Dependency Injection,Asp.net Web Api2,Unity Container,我在Web api 2.0中使用Microsoft Unity进行依赖项注入。它工作正常;但有时它会抛出依赖失败的错误。在已发布的端口和本地项目中发布相同的问题。我正在DDD概念中使用存储库模式。。。下面给出了unit.config中的依赖项代码 var container = new UnityContainer(); container.RegisterType<ILogger, Log4NetLogger>(); container.RegisterType<NHibe

我在Web api 2.0中使用Microsoft Unity进行依赖项注入。它工作正常;但有时它会抛出依赖失败的错误。在已发布的端口和本地项目中发布相同的问题。我正在DDD概念中使用存储库模式。。。下面给出了unit.config中的依赖项代码

var container = new UnityContainer();

container.RegisterType<ILogger, Log4NetLogger>();
container.RegisterType<NHibernateFactory, NHibernateFactory>();
container.RegisterType<INhibernateUnitOfWork, NHUnitOfWork>();
container.RegisterType(typeof(IRepository<,>), typeof(NHRepository<,>));

container.RegisterTypes(AllClasses.FromLoadedAssemblies(), 
    WithMappings.FromMatchingInterface, 
    WithName.Default, 
    WithLifetime.Hierarchical);

GlobalConfiguration.Configuration.DependencyResolver = 
    new UnityDependencyResolver(container);
var container=newunitycontainer();
container.RegisterType();
container.RegisterType();
container.RegisterType();
RegisterType(typeof(IRepository),typeof(NHRepository));
container.RegisterTypes(所有类.FromLoadedAssemblies(),
使用Mappings.FromMatchingInterface,
WithName.Default,
具有生命周期(层次结构);
GlobalConfiguration.Configuration.DependencyResolver=
新的UnityDependencyResolver(容器);
我得到以下错误

2017-03-24 09:47:12426[12]错误主要-System.InvalidOperationException:尝试创建“ProductController”类型的控制器时出错。确保控制器具有无参数公共构造函数。-->Microsoft.Practices.Unity.ResolutionFailedException:依赖项解析失败,type=“Solver.ERP.WebAPI.HMS.Controllers.V1.Masters.ProductController”,name=“(无)”。 解析时发生异常

异常为:InvalidOperationException-当前类型Solver.ERP.Application.Services.IPProductService是一个接口,无法构造。是否缺少类型映射? 发生异常时,容器为:

解析解算器.ERP.WebAPI.HMS.Controllers.V1.Masters.ProductController,(无) 解析构造函数Solver.ERP.WebAPI.HMS.Controllers.V1.Masters.ProductController(Solver.ERP.Application.Services.ipProductService PService,Solver.ERP.Infrastructure.Utility.Logging.ILogger-Nlogger)的参数“PService” 解析解算器.ERP.Application.Services.IPProductService,(无) --->System.InvalidOperationException:当前类型Solver.ERP.Application.Services.IPProductService是一个接口,无法构造。是否缺少类型映射? 在Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForetentingToConstructorInterface(IBuilderContext上下文)中 在lambda_方法(闭包,IBuilderContext) 在Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.c__DisplayClass1.b__0(IBuilderContext)上 位于Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.Building(IBuilderContext上下文) 在Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.Prebuild(IBuilderContext上下文)上 位于Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext上下文) 在Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey) 位于Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext上下文) 在lambda_方法(闭包,IBuilderContext) 在Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.c__DisplayClass1.b__0(IBuilderContext)上 位于Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.Building(IBuilderContext上下文) 在Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.Prebuild(IBuilderContext上下文)上 位于Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext上下文) 在Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型t,对象存在,字符串名,IEnumerable
1 ResolverVerides)
---内部异常堆栈跟踪的结束---
在Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型t,对象存在,字符串名称,IEnumerable
1 ResolverVerides) 在Microsoft.Practices.Unity.UnityContainer.Resolve(键入t,字符串名称,ResolverOverride[]resolverOverrides) 在Microsoft.Practices.Unity.UnityContainerExtensions.Resolve(IUnityContainer容器,键入t,ResolverOverride[]覆盖) 位于Unity.WebApi.unitydependencycoscope.GetService(类型serviceType) 位于System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceActivator(HttpRequestMessage请求,类型controllerType,Func`1&activator) 在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,类型controllerType) ---内部异常堆栈跟踪的结束--- 在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,类型controllerType) 在System.Web.Http.Controllers.HttpControllerDescriptor.CreateController上(HttpRequestMessage请求) 在System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u1.MoveNext()中

下面的代码用于将类映射到接口

container.RegisterTypes(AllClasses.FromLoadedAssemblies(),WithMappings.FromMatchingInterface,WithName.Default,WithLifetime.Hierarchy)


查看您提供的错误消息

错误Main-System.InvalidOperationException:尝试创建“ProductController”类型的控制器时出错。确保控制器具有无参数公共构造函数。-->

这个错误很常见。你没有实例化你的控制器

我不确定使用
Unity
block的语法。但我知道CastleWindsor
DI容器

请在类中添加相应的
Unity
配置

container.Register(Classes.FromThisAssembly()
            .BasedOn(typeof(Controller))
            .If(t => t.Name.EndsWith("Controller"))
            .LifestyleTransient());
             //LifestylePerWebRequest or per thread decide as per your need.

希望有帮助:)

错误消息是什么?您还检查了应用程序池是否没有被回收?NHibernateFactory是否应该注册到INHibernateFactory?如果没有错误的详细描述,可能还有堆栈跟踪和其他异常详细信息,任何人都无法回答此问题。请为我们提供一个最低限度的可复制程序,包括所有必需的异常详细信息。@Steven编辑问题。请找出错误。这是log4net er的日志