Intermezzo–options for loading multiple providers of data – part 10

We have 2 national banks –  and we gather exchange rates from there. What if we want to add more banks  -or let other programmers to add their dll’s to our software to just display the exchange rates from other banks ?


Option 1: HardCode all the list

var l = new List<IExchangeRates[]>
new GetFirstBank()),
new GetSecondBank()),


Option 2: Reading from some config file the list of classes – letting DevOps to modify the config file

var l = new List<IExchangeRates[]>;

foreach(var line in File.ReadAllLines(“myListOfExchangeRates.txt”){

IExchangeRates r= Activator.CreateInstance(Type.GetType(line)) as IExchangeRates ;

l.Add ( r );


Option 3: Reflection – in the current assembly or in all assemblies to load the classes that implements the interface to load the data

var typeToFound = typeof(IExchangeRates);
Assembly a = Assembly.GetExecutingAssembly();
var types = a.GetTypes()
.Where(it => it.GetInterface(typeToFound.FullName)!=null)
foreach(var t in types)
recognizes.Add(Activator.CreateInstance(t)as  IExchangeRates);

Option4 Load as plugins

use the library from  and there are 2 lines , basically:

var loader = new LoadExchangeProviders("plugins");
var exchange = loader.LoadExchangeProviders().ToArray();

And one hour passes...

(This is the result of 1 hour per day auto-challenge as a full cycle developer for an exchange rates application)
2Reading NBR from internet
3Source control and build
4Badge and test
5CI and action
6Artifacts and dotnet try
7Docker with .NET Try
9Intermezzo - Various implementations for programmers
10Intermezzo - similar code - options
11Plugin implementation
12GUI for console
14Plugin in .NET Core 3
15Build and Versioning
16Add swagger
17Docker - first part
18Docker - second part
19Docker - build Azure