using System; using System.Collections.Generic; using System.Reflection; namespace ScriptNET.Runtime { internal static class NameSpaceResolver { internal static NameSpace Get(string name) { return new NameSpace(name); } } /// /// Represents a root for namespace /// internal class NameSpace : IScriptable { /// /// Name of the namespace /// public string Name { get; set; } /// /// Base Contructor /// /// internal NameSpace(string name) { Name = name; if (!RuntimeHost.AssemblyManager.HasNamespace(name)) throw new ScriptIdNotFoundException(string.Format("Namespace {0} is not found", name)); } public override string ToString() { return string.Format("ns:{0}", Name); } #region IScriptable Members [Bindable(false)] public object Instance { get { return this; } } [Bindable(false)] public IMemberBind GetMember(string name, params object[] arguments) { return new NameSpaceBind(string.Format("{0}.{1}", Name, name)); } [Bindable(false)] public IObjectBind GetMethod(string name, params object[] arguments) { throw new NotSupportedException(); } #endregion #region NameSpaceBind private class NameSpaceBind : IMemberBind { string name; public NameSpaceBind(string name) { this.name = name; } #region IMemberBind Members public object Target { get { throw new NotSupportedException(); } } public Type TargetType { get { throw new NotSupportedException(); } } public MemberInfo Member { get { throw new NotSupportedException(); } } public void SetValue(object value) { throw new NotSupportedException(); } public object GetValue() { if (RuntimeHost.HasType(name)) { return RuntimeHost.GetType(name); } else { return new NameSpace(name); } } public void AddHandler(object value) { throw new NotSupportedException(); } public void RemoveHandler(object value) { throw new NotSupportedException(); } #endregion #region IInvokable Members public bool CanInvoke() { throw new NotImplementedException(); } public object Invoke(IScriptContext context, object[] args) { throw new NotImplementedException(); } #endregion } #endregion } }