コード例 #1
0
        public void Initialize()
        {
            var extensionTypes = ExtensionList.GetExtensionInterfaces();

            IDbSet <SarUnit> units = this.db.Units;
            int unitCount          = 0;

            try
            {
                unitCount = units.Local.Count;
            }
            catch (InvalidOperationException)
            {
                this.log.Error("Can't initialize database, does it need to be set up?");
            }

            if (unitCount == 0)
            {
                return;
            }

            foreach (var unit in units)
            {
                string assemblyName = string.Format("{0}.Extensions", unit.DisplayName);
                if (!File.Exists(Path.Combine(Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath), assemblyName + ".dll")))
                {
                    log.InfoFormat("Unit {0} has no extension DLL", unit.DisplayName);
                    continue;
                }
                var assembly = Assembly.Load(assemblyName);
                extensions.Add(unit.Id, new Dictionary <Type, Type>());

                foreach (var type in extensionTypes)
                {
                    Type implementation = assembly.ExportedTypes.SingleOrDefault(f => type.IsAssignableFrom(f));
                    if (implementation == null)
                    {
                        continue;
                    }
                    extensions[unit.Id].Add(type, implementation);
                    log.InfoFormat("{0} added extension {1} for interface {2}", unit.DisplayName, implementation.Name, type.Name);
                }
            }
        }