public static IScripterContext AddDefaultScripterModules(this IScripterContext services)
 {
     return(services
            .AddScripterModule <ConsoleWriterModule>()
            .AddScripterModule <HttpModule>()
            .AddScripterModule <SmtpModule>()
            .AddScripterModule <TemplateModule>());
 }
예제 #2
0
 public static IScripterContext AddJavaScriptEngine(this IScripterContext services)
 {
     return(services.AddScripterEngine <JavaScriptEngine>());
 }
예제 #3
0
 public static IScripterContext AddPowerShellCoreEngine(this IScripterContext services)
 {
     return(services.AddScripterEngine <PowerShellCoreEngine>());
 }
 public static IScripterContext AddTypeScriptEngine(this IScripterContext scripterContext)
 {
     return(scripterContext
            .AddJavaScriptEngine()
            .AddScripterEngine <TypeScriptEngine>());
 }
예제 #5
0
        public static IScripterContext AddModulePlugins(this IScripterContext context)
        {
            var dir = PathHelper.GetFullPath("Scripter\\Modules");
            var assembliesToLoad = new List <string>();

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }



            foreach (var directory in Directory.GetDirectories(dir))
            {
                foreach (var file in Directory.GetFiles(directory, "Scripter.Module.*.dll"))
                {
                    assembliesToLoad.Add(file);
                }

                foreach (var file in Directory.GetFiles(directory, "*.ScripterModule.dll"))
                {
                    assembliesToLoad.Add(file);
                }

                foreach (var file in Directory.GetFiles(directory, "*.Scripter.Module.dll"))
                {
                    assembliesToLoad.Add(file);
                }
            }

            if (!assembliesToLoad.Any())
            {
                return(context);
            }

            var loaders = new List <PluginLoader>();

            foreach (var assembly in assembliesToLoad)
            {
                var loader = PluginLoader.CreateFromAssemblyFile(
                    assembly,
                    config => config.PreferSharedTypes = true);
                loaders.Add(loader);
            }

            // Create an instance of plugin types
            foreach (var loader in loaders)
            {
                using (loader.EnterContextualReflection())
                {
                    foreach (var pluginType in loader
                             .LoadDefaultAssembly()
                             .GetTypes()
                             .Where(t => typeof(IScripterModule).IsAssignableFrom(t) && !t.IsAbstract))
                    {
                        context.AddScripterModule(pluginType);
                    }
                }
            }

            return(context);
        }