예제 #1
0
      public void SetUp()
      {
         _pluginDirectory = @"C:\Temp\Plugins";
         _assemblyLocation = Path.Combine(_pluginDirectory, "TestPlugin.dll");
         _filesystem = new Mock<IFileSystem>();
         _filesystem.Setup(x => x.GetFiles(_pluginDirectory, "*.dll")).Returns(new[] { _assemblyLocation });
         _filesystem.Setup(s => s.GetSubDirectories(_pluginDirectory)).Returns(new List<string>());

         _pluginMetadata = BuildMetadata("1.0.0.0", "TestPlugin");

         _pluginLoader = new Mock<IPluginLoader>();
         _mockPlugin = new Mock<IPlugin>();
         _pluginLoader.Setup(x => x.CreateInstance(_pluginMetadata)).Returns(_mockPlugin.Object);
         _pluginLoader.Setup(x => x.InspectAssembly(_assemblyLocation)).Returns(_pluginMetadata);

         _pluginFactory = new PluginFactory(_filesystem.Object, _pluginDirectory, _pluginLoader.Object);
      }
예제 #2
0
      private void PopulateMetadata(PluginMetadata pluginInfo)
      {
         var existingPlugin = _availablePlugins
             .FirstOrDefault(p => p.Name == pluginInfo.Name);

         if (existingPlugin != null)
         {
            _availablePlugins.Remove(existingPlugin);
         }

         _availablePlugins.Add(pluginInfo);
      }
예제 #3
0
        public IPlugin CreateInstance(PluginMetadata pluginMetadata)
        {
            var assembly = Assembly.LoadFile(pluginMetadata.AssemblyLocation);
            var pluginEntryClass = assembly.GetType(pluginMetadata.EntryClass);

            pluginMetadata.AssemblyInstance = (IPlugin) Activator.CreateInstance(pluginEntryClass, null);
            return pluginMetadata.AssemblyInstance;
        }
예제 #4
0
 private PluginMetadata PopulateMetadata(string name, Version version, string className, string assemblyLocation)
 {
     var plugin = new PluginMetadata
     {
         Name = name,
         ModelVersion = version,
         EntryClass = className,
         AssemblyLocation = assemblyLocation
     };
     return plugin;
 }