using System.Collections.Generic; using System.Linq; namespace ScriptCs.Contracts { public class ScriptPackSession : IScriptPackSession { private readonly IEnumerable _scriptPacks; private readonly string[] _scriptArgs; private readonly IEnumerable _contexts; private readonly IDictionary _state; private readonly IList _references; private readonly IList _namespaces; public ScriptPackSession(IEnumerable scriptPacks, string[] scriptArgs) { _scriptPacks = scriptPacks; _scriptArgs = scriptArgs; _contexts = _scriptPacks.Select(s => s.GetContext()).Where(c => c != null); _references = new List(); _namespaces = new List(); _state = new Dictionary(); AddScriptContextNamespace(); } private void AddScriptContextNamespace() { foreach (var context in _contexts) { _namespaces.Add(context.GetType().Namespace); } } public virtual IEnumerable Contexts { get { return _contexts; } } public IEnumerable References { get { return _references; } } public IEnumerable Namespaces { get { return _namespaces; } } public void InitializePacks() { foreach (var s in _scriptPacks) { s.Initialize(this); } } public void TerminatePacks() { foreach (var s in _scriptPacks) { s.Terminate(); } } public IDictionary State { get { return _state; } } public string[] ScriptArgs { get { return _scriptArgs; } } void IScriptPackSession.AddReference(string assemblyDisplayNameOrPath) { _references.Add(assemblyDisplayNameOrPath); } void IScriptPackSession.ImportNamespace(string @namespace) { _namespaces.Add(@namespace); } } }