using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using Tango.Core.Helpers; namespace Tango.Scripting.Basic { public class ReferenceAssembly { private static Dictionary _assembliesCache; static ReferenceAssembly() { _assembliesCache = new Dictionary(); } public String File { get; set; } public Type HintType { get; set; } [JsonIgnore] public String Name { get { return Path.GetFileNameWithoutExtension(File); } } public static ReferenceAssembly FromType(Type type) { ReferenceAssembly reference = new ReferenceAssembly(); reference.HintType = type; var assembly = type.Assembly; reference.File = assembly.Location; return reference; } public static ReferenceAssembly FromFile(String file) { return new ReferenceAssembly() { File = file }; } public Assembly Load() { Assembly loaded = null; if (!_assembliesCache.TryGetValue(Name, out loaded)) { try { if (HintType != null) { loaded = HintType.Assembly; } else { loaded = Assembly.LoadFrom(File); } _assembliesCache.Add(Name, loaded); } catch { try { String dotNetPath = AssemblyHelper.GetAssemblyTargetFrameworkFolder(Assembly.GetExecutingAssembly()); String dotNetAsm = Path.Combine(dotNetPath, Name + ".dll"); loaded = Assembly.LoadFrom(dotNetAsm); _assembliesCache.Add(Name, loaded); } catch (Exception ex) { throw new FileNotFoundException($"Could not load assembly '{Name}'. File not found.", ex); } } } return loaded; } public override string ToString() { return Name; } } }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using Tango.MachineStudio.Common;
using Tango.SharedUI;

namespace Tango.MachineStudio.UI.ViewModels
{
    public class ModuleWindowVM : ViewModel
    {
        private IStudioModule _module;

        public IStudioModule Module
        {
            get { return _module; }
            set { _module = value; RaisePropertyChangedAuto(); }
        }

        public ModuleWindowVM(IStudioModule module)
        {
            Module = module;
        }
    }
}