using Microsoft.Practices.Unity;
using System.Collections.Generic;
public static void Main()
IUnityContainer container = new UnityContainer();
container.RegisterType<IDataFetcher, FileFetcher>("file");
container.RegisterType<IDataFetcher, DBFetcher>("db");
container.RegisterType<IDataFetcher, MachineFetcher>("machine");
IRuntimeData rtData = new RuntimeData();
rtData.connectionString = "Persist Security Info=False;Integrated Security=true;Initial Catalog=Northwind;server=(local)";
rtData.filePath = @"C:\foo.txt";
rtData.machineName = "jlvaqueroMachine";
container.RegisterInstance<IRuntimeData>(rtData);
Analyzer myAnalyzer = container.Resolve<Analyzer>();
myAnalyzer.PerformAnalysis();
private List<IDataFetcher> _fetcherList;
public Analyzer(IDataFetcher[] fetcherList)
_fetcherList = new List<IDataFetcher>(fetcherList);
public void PerformAnalysis()
foreach (IDataFetcher dtFetcher in _fetcherList)
Console.WriteLine(dtFetcher.getData());
public interface IRuntimeData
string filePath { get; set; }
string connectionString { get; set; }
string machineName { get; set; }
class RuntimeData : IRuntimeData
public string filePath { get; set; }
public string connectionString { get; set; }
public string machineName { get; set; }
class FileFetcher : IDataFetcher
private string _filePath;
public FileFetcher(IRuntimeData userInputData)
_filePath = userInputData.filePath;
return "Hello from FileFetcher. File path is " + _filePath;
class DBFetcher : IDataFetcher
public DBFetcher(IRuntimeData userInputData)
_connStr = userInputData.connectionString;
return "Hello from DBFetcher. Connection string is " + _connStr;
class MachineFetcher : IDataFetcher
private string _machineName;
public MachineFetcher(IRuntimeData userInputData)
_machineName = userInputData.machineName;
return "Hello from MachineFetcher. Machine name is " + _machineName;