public static List <DynamicOrderRule> LoadRules(string assemblyPath)
        {
            var rules = new List <DynamicOrderRule>();

            // TODO: Add code to dynamically load rules based on a path.
            if (!Directory.Exists(assemblyPath))
            {
                return(rules);
            }

            IEnumerable <string> assemblyFiles = Directory.EnumerateFiles(assemblyPath, "*.dll", SearchOption.TopDirectoryOnly);

            foreach (var assemblyFile in assemblyFiles)
            {
                Assembly assembly = Assembly.LoadFrom(assemblyFile);

                foreach (var type in assembly.ExportedTypes)
                {
                    if (type.IsClass && typeof(IOrderRule).IsAssignableFrom(type))   // Does the class implement IOrderRule?
                    {
                        IOrderRule rule = Activator.CreateInstance(type) as IOrderRule;
                        rules.Add(new DynamicOrderRule(rule, type.FullName, type.Assembly.GetName().Name));
                    }
                }
            }


            return(rules);
        }
Example #2
0
        public static List <IOrderRule> LoadRules(string assemblyPath)
        {
            var rules = new List <IOrderRule>();

            if (!Directory.Exists(assemblyPath))
            {
                return(rules);
            }

            IEnumerable <string> assemblyFiles = Directory.EnumerateFiles(
                assemblyPath, "*.dll", SearchOption.TopDirectoryOnly);

            foreach (string assemblyFile in assemblyFiles)
            {
                Assembly assembly = Assembly.LoadFrom(assemblyFile);

                var ruleTypes = assembly.ExportedTypes
                                .Where(rt => rt.IsClass && typeof(IOrderRule).IsAssignableFrom(rt));

                foreach (Type type in ruleTypes)
                {
                    IOrderRule rule = Activator.CreateInstance(type) as IOrderRule;
                    rules.Add(rule);
                }
            }

            return(rules);
        }
Example #3
0
 public DynamicOrderRule(IOrderRule orderRule,
                         string typeName, string assemblyName)
 {
     OrderRule    = orderRule;
     TypeName     = typeName;
     AssemblyName = assemblyName;
 }