示例#1
0
        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();
        }
示例#2
0
        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();
        }