private void AddFactories(FileInfo assemblyFileInfo) { if (!assemblyFileInfo.Exists) { throw new Exception( "File not found: " + assemblyFileInfo.FullName); } Assembly assembly = Assembly.LoadFile(assemblyFileInfo.FullName); List <Type> factoryTypes = new List <Type>(); foreach (Type type in assembly.GetExportedTypes()) { // need a parameterless constructor if (type.GetConstructor(Type.EmptyTypes) == null) { continue; } foreach (Type inter in type.GetInterfaces()) { if (inter == typeof(IAdaptedOutputFactory)) { factoryTypes.Add(type); break; } } } if (factoryTypes.Count == 0) { MessageBox.Show("No types derived from IAdaptedOutputFactory with parameterless constructors found", "Add Factories", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } UIAdaptedFactory factory; foreach (Type type in factoryTypes) { factory = new UIAdaptedFactory(); factory.InitialiseAs3rdParty(assemblyFileInfo, type.ToString()); AddFactory(factory); } UpdateUIFactories(); }
public FactoriesDialog(List <UIModel> models, UIOutputItem itemOut, UIInputItem itemIn) { _itemOut = itemOut; _itemIn = itemIn; UIAdaptedFactory factory; string firstSourceFactory = null; foreach (UIModel model in models) { foreach (IAdaptedOutputFactory iFactory in model.LinkableComponent.AdaptedOutputFactories) { factory = new UIAdaptedFactory(); if (_itemOut.Component == model.LinkableComponent) { factory.InitialiseAsNative(iFactory.Id, model.LinkableComponent); if (firstSourceFactory == null) { firstSourceFactory = factory.ToString(); } } else { factory.InitialiseAs3rdParty(iFactory.GetType(), model.LinkableComponent); } AddFactory(factory); } } InitializeComponent(); groupBox2.Text = string.Format( "Factory sources that adapt \"{0}\" -> \"{1}\"", itemOut.Caption, itemIn.Caption); UpdateUIFactories(); if (firstSourceFactory != null) { cbFactories.SelectedIndex = cbFactories.FindStringExact(firstSourceFactory); } UpdateControlEnabling(); }