Inject variables from the controller to blocks?

I have a Product module that implements an entity, a Repository, a Controller and 2 Blocks

The problem is that, on the product page, I am consulting the entity in each block and also in the Controller. I'm trying to find a way to check ONLY ONCE, and then pass the result to the 3 parts (Blocks and Controller).

So, for example, I have:

the SidebarProductBlock class extends BlockBase {

$ repository = new ProductRepository ();

$ product_id = $ route_match-> getParameter (& # 39; id & # 39;);
$ productObject = $ repository-> getProductByProductId ($ product_id);

// A little more processing and return.
}

The StoresGridProductBlock class extends BlockBase {

// Here I ask AGAIN

$ repository = new ProductRepository ();

$ product_id = $ route_match-> getParameter (& # 39; id & # 39;);
$ productObject = $ repository-> getProductByProductId ($ product_id);

// A little more processing and return.
}

// And on the controller I ask AGAIN.

How can I manage the query of the database only once and use the pass the result in the 3 parts?

The blocks are always rendered on the same page.