When I have a variation Code and I want to retrieve its Content, I do this:
var ref = GetCatalogEntryReferenceFromEpi(variationCode);var content = _contentLoader.Get<VariationContent>(ref, LanguageSelector.AutoDetect(true));
var ref = GetCatalogEntryReferenceFromEpi(variationCode);
var content = _contentLoader.Get<VariationContent>(ref, LanguageSelector.AutoDetect(true));
This works... but, I'd don't really want type VariationContent. I want a derived type such as ShirtVariationContent, SneakerVariationContent, etc... But I don't know what type it will be -- because I only have the Code...
What is the recommended way to "know" & get the actual derived type from IContentLoader?
In that case you can use follwoing approach, use TryGet (in below example, here this._contentRepository is instance of IContentRepository)
this._contentRepository.TryGet(contentLink, out content);
And, then do a type check as
if (content is ShirtVariationContent shirtVariationContent)
//// Your code...
It will cast your object is condition is true.
Thanks & Regards
You can load, cast and check the variation in one line, like this:
if (!_contentLoader.TryGet(contentLink, out SneakerVariationContent sneakerVariation))
// The target does not exist, or the content is not of type 'SneakerVariationContent'.
// Do something with the sneakerVariation variable.
You can also put this in a generic method with a type parameter, TContent, by replacing SneakerVariationContent with TContent (but TContent must inherit from IContentData).