zoukankan      html  css  js  c++  java
  • .Net平台下实例类型无法转换成接口类型?

    首先这种情况出现在应用程序启动前的方法里面。

    本想通过发射来实现一些功能。谁知道被这个坑了。

    碰到这种问题。已经相当无语了。同时也不知道该如何解决。望有能之士帮忙解答

    using System;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Web;
    using System.Web.Compilation;
    using System.Web.Hosting;
    using Infrastructure;
    
    [assembly: PreApplicationStartMethod(typeof(PreApplicationInit), "InitializePlugins")]
    namespace Infrastructure
    {
        public class PreApplicationInit
        {
            static PreApplicationInit()
            {
                var pluginsPath = HostingEnvironment.MapPath("~/plugins");
                
                var pluginsTempPath = HostingEnvironment.MapPath("~/plugins/temp");
    
                if (pluginsPath == null || pluginsTempPath == null)
    	            throw new DirectoryNotFoundException("plugins");
    
                PluginFolder = new DirectoryInfo(pluginsPath);
                TempPluginFolder = new DirectoryInfo(pluginsTempPath);
            }
    
            /// <summary>
            /// The source plugin folder from which to copy from
            /// </summary>
            /// <remarks>
            /// This folder can contain sub folders to organize plugin types
            /// </remarks>
            private static readonly DirectoryInfo PluginFolder;
    
            /// <summary>
            /// The folder to  copy the plugin DLLs to use for running the app
            /// </summary>
            private static readonly DirectoryInfo TempPluginFolder;
    
            /// <summary>
            /// Initialize method that registers all plugins
            /// </summary>
            public static void InitializePlugins()
            {
                var assemblies = PluginFolder.GetFiles("*.dll", SearchOption.AllDirectories)
                        .Select(x => Assembly.LoadFrom(x.FullName));
    
                foreach (var assembly in assemblies)
                {
                    var type = assembly.GetTypes().FirstOrDefault(t => t.GetInterface(typeof(IModule).Name) != null);
                    if (type == null) continue;
                    //Add the plugin as a reference to the application
                    if (AppDomain.CurrentDomain.GetAssemblies().All(a => a.FullName != assembly.FullName))
                    {
                        BuildManager.AddReferencedAssembly(assembly);
                    }
    
                    //Add the modules to the PluginManager to manage them later
                    var module = (IModule)Activator.CreateInstance(type);
                    PluginManager.Current.Modules.Add(module, assembly);
                }
            }
        }
    }
    

      上面是代码。

    如果通过Type.IsAssignableFrom方法来查找接口的实现,根本查不到。

    这是目录结构

    这是Module的实现

    using System;
    using Infrastructure;
    
    namespace NewsPlugin
    {
        public class Module:IModule
        {
            public string Name {
                get
                {
                    return "NewsPlugin";
                }
                set
                {
                    if (value == null) throw new ArgumentNullException("value");
                    this.Name = value;
                }
            }
        }
    }
    

  • 相关阅读:
    前端一站式学习地址
    springboot注解开发
    java中的四种内部类使用(1)
    java内存回收机制
    TweenMax详解
    flash渲染机制
    通过字符串名访问变量
    总结调用Flash的几种方法
    flex buider2 的注册
    转:FlexChn.Cn Adobe Flex最佳学习路线
  • 原文地址:https://www.cnblogs.com/showstyle/p/3706188.html
Copyright © 2011-2022 走看看