无法实例化SessionProvider

时间:2015-09-15 11:04:33

标签: c# umbraco-ucommerce

我正在使用UConnector下载订单并更新状态。实际下载按预期工作,但当我尝试更新状态时,我收到错误。我已经对导致代码中的错误的行进行了评论。我希望有人能告诉我我错过了什么?

我的Component.config

<configuration>
 <components>
    <component
        id="SessionProvider"
        service="UCommerce.EntitiesV2.ISessionProvider, UCommerce"
        type="UCommerce.EntitiesV2.SessionProvider, UCommerce"/>
    <component id="UCommerce.DataMappingsTag"
        service="UCommerce.EntitiesV2.IContainsNHibernateMappingsTag, UCommerce"
        type="UCommerce.EntitiesV2.MappingAssemblyTag, UCommerce"/>
    <component id="OrderService"
        service="UCommerce.Transactions.IOrderService, UCommerce"
        type="UCommerce.Transactions.OrderService, UCommerce"/>
    <component id="Repository"
        service="UCommerce.EntitiesV2.IRepository`1, UCommerce"
        type="UCommerce.EntitiesV2.Repository`1, UCommerce"/>
</components>
</configuration>

代码

var orderService = ObjectFactory.Instance.Resolve<IOrderService>(); 
//var newOrderStatus = OrderStatus.Get((int)OrderStatusCode.Processing);  //This line
var newOrderStatus = OrderStatus.All().SingleOrDefault(x => x.Name == "Processing");  //OR this line give the same error
orderService.ChangeOrderStatus(item, newOrderStatus);

错误:

  

ComponentActivator:无法实例化   UCommerce.EntitiesV2.SessionProvider

的InnerException:

  

{&#34;没有支持该服务的组件   UCommerce.Infrastructure.Configuration.CommerceConfigurationProvider   被发现&#34;}

堆栈追踪:

  

在   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstanceCore(ConstructorCandidate   构造函数,Object []参数,类型implType)at   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstance(CreationContext   context,ConstructorCandidate构造函数,Object []参数)at   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiate(CreationContext   上下文)   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCreate(CreationContext   上下文)   Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext   背景,负担负担)   Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.CreateInstance(CreationContext   context,Boolean trackedExternally)at   Castle.MicroKernel.Lifestyle.ScopedLifestyleManager&LT;&GT; n__FabricatedMethod3(CreationContext   ,布尔)   Castle.MicroKernel.Lifestyle.ScopedLifestyleManager&LT;&GT; c__DisplayClass1.b__0(动作1 afterCreated) at Castle.MicroKernel.Lifestyle.Scoped.DefaultLifetimeScope.GetCachedInstance(ComponentModel model, ScopedInstanceActivationCallback createInstance) at Castle.MicroKernel.Lifestyle.ScopedLifestyleManager.Resolve(CreationContext context, IReleasePolicy releasePolicy) at Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext context, Boolean requiresDecommission, Boolean instanceRequired, Burden& burden) at Castle.MicroKernel.Handlers.DefaultHandler.Resolve(CreationContext context, Boolean instanceRequired) at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext context) at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveFromKernelByType(CreationContext context, ComponentModel model, DependencyModel dependency) at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveFromKernel(CreationContext context, ComponentModel model, DependencyModel dependency) at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveCore(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency) at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency) at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateConstructorArguments(ConstructorCandidate constructor, CreationContext context) at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiate(CreationContext context) at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCreate(CreationContext context) at Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext context, Burden burden) at Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.CreateInstance(CreationContext context, Boolean trackedExternally) at Castle.MicroKernel.Lifestyle.ScopedLifestyleManager.<>n__FabricatedMethod3(CreationContext , Boolean ) at Castle.MicroKernel.Lifestyle.ScopedLifestyleManager.<>c__DisplayClass1.b__0(Action 1   afterCreated)at   Castle.MicroKernel.Lifestyle.Scoped.DefaultLifetimeScope.GetCachedInstance(ComponentModel   model,ScopedInstanceActivationCallback createInstance)at   Castle.MicroKernel.Lifestyle.ScopedLifestyleManager.Resolve(CreationContext   上下文,IReleasePolicy releasePolicy)at   Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext   context,Boolean requiresDecommission,Boolean instanceRequired,   负担和放大器;负担)   Castle.MicroKernel.Handlers.DefaultHandler.Resolve(CreationContext   context,Boolean instanceRequired)at   Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext   上下文)   Castle.MicroKernel.Handlers.DefaultGenericHandler.Resolve(CreationContext   context,Boolean instanceRequired)at   Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext   在Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler   处理程序,类型服务,IDictionary additionalArguments,IReleasePolicy   政策)   Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(类型   服务,IDictionary参数,IReleasePolicy政策)at   Castle.MicroKernel.DefaultKernel.Resolve(类型服务,IDictionary   参数)在Castle.Windsor.WindsorContainer.ResolveT at   UCommerce.Infrastructure.ObjectFactory.ResolveT at   UCommerce.EntitiesV2.OrderStatus.GetRepo()at   UCommerce.EntitiesV2.OrderStatus.All()at   SiteConnector.Classes.OrdersListToCalClub.Send(IEnumerable`1输入)

2 个答案:

答案 0 :(得分:1)

我发现你实际上需要更多的dll然后你会想。 这是我所包含的两个截图(项目中的引用和lib文件夹)。我正在与sitecore集成,但你可以用我想的Umbracco对应的那些替代这些dll。

这是我用来更新订单状态的代码。该列表包含我的情况下的订单行(我在azure存储中保存了一个列表,所以你也会看到一些dll)。

ISession session = new SessionProvider("connectionstring").GetSession();
OrderStatus status = session.Query<OrderStatus>().FirstOrDefault(os => os.Name.Equals("Processing"));     
foreach (PurchaseOrder order in list.Select(o => o.PurchaseOrder))
{
    order.OrderStatus = status;
    session.Save(order);               
} 
session.Flush();

enter image description here

enter image description here

答案 1 :(得分:1)

这会将采购订单更新为它在ord.OrderStatusName中找到的任何状态。此外,我发现如果处理超过200条记录,不清除会话可能会减慢速度。

foreach (CcOrder ord in input)
{
    PurchaseOrder poOrder =
    _session.Query<PurchaseOrder>().FirstOrDefault(p => p.OrderNumber == ord.OrderId);
    OrderStatus newOrderStatus = _session.Query<OrderStatus>().FirstOrDefault(p => p.Name == ord.OrderStatusName);

    if (poOrder == null || newOrderStatus == null) continue; //If one or both not found go to next
    poOrder.OrderStatus = newOrderStatus;
    _session.Save(poOrder);
    _session.Flush();
    _session.Clear();
}