braintree_dotnet icon indicating copy to clipboard operation
braintree_dotnet copied to clipboard

Unable to set `Configuration` property after instantiating since 5.0.0

Open jebax opened this issue 3 years ago • 4 comments

General information

  • SDK/Library version: 5.0.0
  • Environment: N/A
  • Language, language version, and OS: .NET framework 4.7.2

Issue description

Hi,

Our previous method of instantiating BraintreeGateway was to do something like this:

new BraintreeGateway()
{
  Configuration = new CustomBraintreeConfiguration()
}

Where CustomBraintreeConfiguration inherits from Braintree.Configuration.

Since 5.0.0, instantiating BraintreeGateway like this causes all HTTP calls to break with a NullReferenceException (from trying to access Environment.GatewayURL here).

I can see in the 5.0.0 commit that many classes now use the static property gateway.Service instead of instantiating a new service using gateway.Configuration. Since gateway.Service is assigned during the BraintreeGateway constructor, setting Configuration on the gateway after instantiation will always mean Environment is null.

Spent quite a while debugging this, and I think more people could run into this issue unless you either make the Configuration read-only or throw a more descriptive error. This breaking change also wasn't in the 5.0.0 changelog or the v5 migration guide.

Thanks!

jebax avatar Apr 14 '22 15:04 jebax

👋 @jebax thanks for the issue, and apologies that our CHANGELOG wasn't more clear. We moved to an entirely static HTTPClient in v5 which is you're encountering issues, now. I just want to confirm, you're not encountering this issue when creating a Configuration class object outside of constructing a BraintreeGateway?

We have another issue open that's related (#123), so we'll be taking another look at gateway and config construction in future versions for sure.

hollabaq86 avatar Apr 25 '22 16:04 hollabaq86

👋 @jebax thanks for the issue, and apologies that our CHANGELOG wasn't more clear. We moved to an entirely static HTTPClient in v5 which is you're encountering issues, now. I just want to confirm, you're not encountering this issue when creating a Configuration class object outside of constructing a BraintreeGateway?

We have another issue open that's related (#123), so we'll be taking another look at gateway and config construction in future versions for sure.

Thanks for the reply.

Yeah there's no issues now that I'm passing a configuration object into the constructor. Sounds like it's just an issue with the changelog then, IMO it's pretty hard to know that a static HTTP client is going to affect the way you instantiate the gateway without looking at the source code!

jebax avatar Apr 25 '22 16:04 jebax

Sounds like it's just an issue with the changelog then

💯 We can make this more clear in the CHANGELOG and our migration guides, too. I'll keep this issue open until we have that fixed up.

hollabaq86 avatar Apr 26 '22 21:04 hollabaq86

for internal notekeeping, ticket 1615

hollabaq86 avatar May 02 '22 20:05 hollabaq86