Cutom shipping implemetation not working after upgrade to 12.2.0

Vote:
 

Hi,

Below is a custom shipping implementation, I have also registered it in the ConfigureContainer method. But it doesnt even hit the break point and I get an error saying the IShippingGateway or IShippingPlugin is not implemented. I migrated from 10.7.0 to 12.2.0 FYI. Could someone please guide me on this:

Below is the Initialization:

public class SampleInitialization : IInitializableModule, IConfigurableModule
{
public void Initialize(InitializationEngine context)
{
//Add initialization logic, this method is called once after CMS has been initialized
}

public void Uninitialize(InitializationEngine context)
{
//Add uninitialization logic
}

public void ConfigureContainer(ServiceConfigurationContext context)
{
var services = context.Services;

services.AddSingleton();
}
}

Below is the custom shipping logic (setting it to 0.0 as a sample):

public class CustomShipping : IShippingGateway
{
public ShippingRate GetRate(IMarket market, Guid methodId, Shipment shipment, ref string message)
{
ShippingRate shippingRate = (ShippingRate)null;
ShippingMethodDto shippingMethod = ShippingManager.GetShippingMethodsByMarket(ServiceLocator.Current.GetInstance().GetCurrentMarket().MarketId.ToString(), false);
ShippingMethodDto.ShippingMethodRow shippingMethodRow = shippingMethod.ShippingMethod[0];
shippingRate = new ShippingRate(methodId, shippingMethodRow.DisplayName,
new Money(shippingMethodRow.BasePrice,
new Currency(shippingMethodRow.Currency)));
return shippingRate;
}
}



#193528
Edited, May 30, 2018 17:40
Vote:
 

Not sure what is wrong,  but does it work if you use attribute registration instead?  I.e.  ServiceConfiguration attribute  ? 

#193530
May 30, 2018 17:59
Vote:
 

@Quan Mai: I tried that too just now, but the same result frown

[ServiceConfiguration(ServiceType = typeof(IShippingGateway), Lifecycle = ServiceInstanceScope.Singleton)]
public class CustomShipping : IShippingGateway
{
public ShippingRate GetRate(IMarket market, Guid methodId, Shipment shipment, ref string message)
{
ShippingRate shippingRate = (ShippingRate)null;
ShippingMethodDto shippingMethod = ShippingManager.GetShippingMethodsByMarket(ServiceLocator.Current.GetInstance<Mediachase.Commerce.ICurrentMarket>().GetCurrentMarket().MarketId.ToString(), false);
ShippingMethodDto.ShippingMethodRow shippingMethodRow = shippingMethod.ShippingMethod[0];
shippingRate = new ShippingRate(methodId, shippingMethodRow.DisplayName,
new Money(shippingMethodRow.BasePrice,
new Currency(shippingMethodRow.Currency)));
return shippingRate;
}
}





#193531
Edited, May 30, 2018 18:12
Vote:
 
<p>Can you post the full stacktrace please?</p>
#193553
May 31, 2018 9:49
Vote:
 

Hi @Quan Sorry for the late reply, below is the stack trace for your reference:

https://www.screencast.com/t/tScdKWphIesw

Also, the support team has escalated this issue to the Product Development Engineering team. I sent my solution and the database to the support team and they as well were unable to figure out this error. 

#193833
Jun 05, 2018 17:09
Vote:
 

Hi @Quan Sorry for the late reply, below is the stack trace for your reference:

https://www.screencast.com/t/tScdKWphIesw

Also, the support team has escalated this issue to the Product Development Engineering team. I sent my solution and the database to the support team and they as well were unable to figure out this error. 

#193835
Jun 05, 2018 17:09
Vote:
 
<p>It was me who was looking into the case. I used dotTrace to decompile the assembly and it has no attribute. Was there something missing?&nbsp;</p>
#193837
Jun 05, 2018 17:50
Vote:
 

@Quan: To the best of my knowledge, no. But we also have a shippping library which we add into our project. Also, I have replied to the support ticket just now; asking if they need anything else (Is there a way to have this discussion on the ticket?). 

#193838
Jun 05, 2018 18:07
Vote:
 

I can't really access the ticket now - This is from dotPeek (not dotTrace) - I changed the namespace for you.

This is from the solution you sent. there was no source code (only the dll), so I couldn't try the attribute

One thing to look into is to make sure the shipping method was configured with class name in Commerce Manager. As you said it worked before upgrade so it's unlikely, but let's make sure no stone is left untuned

namespace name.space
{
  public class CustomShippingGateway : IShippingGateway
  {
    private IMarket _market;
 
    public CustomShippingGateway(IMarket market)
    {
      this._market = market;
    }
 
    public CustomShippingGateway()
    {
    }
 
    public ShippingRate GetRate(IMarket market, Guid methodId, Shipment shipment, ref string message)
    {
      ShippingRate shippingRate = (ShippingRate) null;
      ICustomShipping customShipping = ServiceLocator.Current.GetAllInstances<ICustomShipping>().FirstOrDefault<ICustomShipping>();
      if (customShipping != null)
        shippingRate = customShipping.GetCustomRate(methodId, shipment, ref message);
      if (shippingRate == null)
        message = "The shipping method could not be loaded.";
      return shippingRate;
    }
  }
}
#193840
Jun 05, 2018 19:07
Vote:
 

[Pasting files is not allowed]

#193871
Edited, Jun 06, 2018 18:46
Vote:
 
<p>You should have removed the constructor which takes IMarket, that is no longer needed and was mentioned in the breaking change document :)</p>
#193873
Jun 06, 2018 19:19
Vote:
 

@Quan: Works like a charm now :) Thank you so much! :) _/\_

#193877
Jun 06, 2018 19:34
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.