diff --git a/src/Orchard/Commands/CommandAgent.cs b/src/Orchard/Commands/CommandAgent.cs new file mode 100644 index 000000000..9c732f9bb --- /dev/null +++ b/src/Orchard/Commands/CommandAgent.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Web.Mvc; +using System.Web.Routing; +using Autofac; +using Orchard.Environment; + +namespace Orchard.Commands { + /// + /// This is the guy instantiated by the orchard.exe host. It is reponsible for + /// executing a single command. + /// + public class CommandAgent { + public void RunSingleCommand(string[] args) { + try { + Console.WriteLine("Command being run!"); + + var host = OrchardStarter.CreateHost(MvcSingletons); + host.Initialize(); + + var shell = host. + } + catch (Exception e) { + while (e != null) { + Console.WriteLine("Error: {0}", e.Message); + e = e.InnerException; + } + } + } + + protected void MvcSingletons(ContainerBuilder builder) { + builder.RegisterInstance(ControllerBuilder.Current); + builder.RegisterInstance(RouteTable.Routes); + builder.RegisterInstance(ModelBinders.Binders); + builder.RegisterInstance(ModelMetadataProviders.Current); + builder.RegisterInstance(ViewEngines.Engines); + } + } +} diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index d3f00c208..928c861cf 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -129,6 +129,7 @@ + diff --git a/src/Tools/Orchard/Host/CommandHost.cs b/src/Tools/Orchard/Host/CommandHost.cs index b74d1913b..f0a56a57f 100644 --- a/src/Tools/Orchard/Host/CommandHost.cs +++ b/src/Tools/Orchard/Host/CommandHost.cs @@ -18,5 +18,10 @@ namespace Orchard.Host { public void Stop(bool immediate) { //TODO } + + public void RunCommand(string[] args) { + var agent = Activator.CreateInstance("Orchard.Framework", "Orchard.Commands.CommandAgent").Unwrap(); + agent.GetType().GetMethod("RunSingleCommand").Invoke(agent, new object[] { args }); + } } } \ No newline at end of file diff --git a/src/Tools/Orchard/Orchard.csproj b/src/Tools/Orchard/Orchard.csproj index 98850fc8b..7967a04e7 100644 --- a/src/Tools/Orchard/Orchard.csproj +++ b/src/Tools/Orchard/Orchard.csproj @@ -21,6 +21,8 @@ DEBUG;TRACE prompt 4 + true + x86 pdbonly diff --git a/src/Tools/Orchard/OrchardArguments.cs b/src/Tools/Orchard/OrchardArguments.cs index f6dc9bb49..503032de8 100644 --- a/src/Tools/Orchard/OrchardArguments.cs +++ b/src/Tools/Orchard/OrchardArguments.cs @@ -8,5 +8,6 @@ namespace Orchard { public bool Verbose { get; set; } public string VirtualPath { get; set; } public string WorkingDirectory { get; set; } + public string Tenant { get; set; } } } \ No newline at end of file diff --git a/src/Tools/Orchard/OrchardArgumentsParser.cs b/src/Tools/Orchard/OrchardArgumentsParser.cs index 2a39280e3..0b048aaea 100644 --- a/src/Tools/Orchard/OrchardArgumentsParser.cs +++ b/src/Tools/Orchard/OrchardArgumentsParser.cs @@ -10,8 +10,9 @@ namespace Orchard { } public class OrchardArgumentsParser : IOrchardArgumentsParser { + public OrchardArguments Parse(ParserResult arguments) { - OrchardArguments result = new OrchardArguments(); + var result = new OrchardArguments(); foreach (var sw in arguments.Switches) { switch (sw.Name.ToLowerInvariant()) { @@ -29,6 +30,11 @@ namespace Orchard { case "virtualpath": result.VirtualPath = sw.Value; break; + + case "t": + case "tenant": + result.Tenant = sw.Value; + break; } } diff --git a/src/Tools/Orchard/Program.cs b/src/Tools/Orchard/Program.cs index 1d6169012..8ce06821f 100644 --- a/src/Tools/Orchard/Program.cs +++ b/src/Tools/Orchard/Program.cs @@ -41,8 +41,16 @@ namespace Orchard { Console.WriteLine("Detected and using orchard directory \"{0}\"", orchardDirectory.FullName); } - object host = CreateWorkerAppDomainWithHost(arguments.VirtualPath, orchardDirectory.FullName, typeof(CommandHost)); + if (arguments.Verbose) { + Console.WriteLine("Creating ASP.NET AppDomain for command agent"); + } + var host = (CommandHost)CreateWorkerAppDomainWithHost(arguments.VirtualPath, orchardDirectory.FullName, typeof(CommandHost)); + + if (arguments.Verbose) { + Console.WriteLine("Executing command in ASP.NET AppDomain"); + } + host.RunCommand(_args); } private DirectoryInfo GetOrchardDirectory(string directory) {