nop中 插件机制是比较值得学习的:

Nop 插件学习:

1、 项目里面的生成必须是采用 直接编辑项目文件,参考nop原本的项目文件

动态加载插件的方法-mvc3 参考:

using System.Linq;

using System.Web;

using System.IO;

using System.Web.Hosting;

using System.Web.Compilation;

using System.Reflection;

[assembly: PreApplicationStartMethod(typeof(PluginFramework.Plugins.PreApplicationInit), "Initialize")]

namespace PluginFramework.Plugins

{

public class PreApplicationInit

{

static PreApplicationInit()

{

PluginFolder = new DirectoryInfo(HostingEnvironment.MapPath("~/plugins"));

ShadowCopyFolder = new DirectoryInfo(HostingEnvironment.MapPath("~/plugins/temp"));

}

/// <summary>

/// The source plugin folder from which to shadow copy from

/// </summary>

/// <remarks>

/// This folder can contain sub folderst to organize plugin types

/// </remarks>

private static readonly DirectoryInfo PluginFolder;

/// <summary>

/// The folder to shadow copy the plugin DLLs to use for running the app

/// </summary>

private static readonly DirectoryInfo ShadowCopyFolder;

public static void Initialize()

{

Directory.CreateDirectory(ShadowCopyFolder.FullName);

//clear out plugins)

foreach (var f in ShadowCopyFolder.GetFiles("*.dll", SearchOption.AllDirectories))

{

f.Delete();

}

//shadow copy files

foreach (var plug in PluginFolder.GetFiles("*.dll", SearchOption.AllDirectories))

{

var di = Directory.CreateDirectory(Path.Combine(ShadowCopyFolder.FullName, plug.Directory.Name));

// NOTE: You cannot rename the plugin DLL to a different name, it will fail because the assembly name is part if it's manifest

// (a reference to how assemblies are loaded: http://msdn.microsoft.com/en-us/library/yx7xezcf )

File.Copy(plug.FullName, Path.Combine(di.FullName, plug.Name), true);

}

// Now, we need to tell the BuildManager that our plugin DLLs exists and to reference them.

// There are different Assembly Load Contexts that we need to take into account which

// are defined in this article here:

// http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx

// * This will put the plugin assemblies in the 'Load' context

// This works but requires a 'probing' folder be defined in the web.config

foreach (var a in

ShadowCopyFolder

.GetFiles("*.dll", SearchOption.AllDirectories)

.Select(x =>  AssemblyName.GetAssemblyName(x.FullName))

.Select(x => Assembly.Load(x.FullName)))

{

BuildManager.AddReferencedAssembly(a);

}

// * This will put the plugin assemblies in the 'LoadFrom' context

// This works but requires a 'probing' folder be defined in the web.config

// This is the slowest and most error prone version of the Load contexts.

//foreach (var a in

//    ShadowCopyFolder

//    .GetFiles("*.dll", SearchOption.AllDirectories)

//    .Select(plug => Assembly.LoadFrom(plug.FullName)))

//{

//    BuildManager.AddReferencedAssembly(a);

//}

// * This will put the plugin assemblies in the 'Neither' context ( i think )

// This nearly works but fails during view compilation.

// This DOES work for resolving controllers but during view compilation which is done with the RazorViewEngine,

// the CodeDom building doesn't reference the plugin assemblies directly.

//foreach (var a in

//    ShadowCopyFolder

//    .GetFiles("*.dll", SearchOption.AllDirectories)

//    .Select(plug => Assembly.Load(File.ReadAllBytes(plug.FullName))))

//{

//    BuildManager.AddReferencedAssembly(a);

//}

}

}

}

<!-- AddThis Button BEGIN --><div class="addthis_toolbox addthis_default_style "><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a><a class="addthis_counter addthis_bubble_style"></a></div><script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=nopsolutions"></script><!-- AddThis Button END -->

nopcommerce 4.1 core 插件 相关1的更多相关文章

  1. TeamCity : .NET Core 插件

    笔者在<TeamCity : 配置 Build 过程>一文中提到 "TeamCity 内置支持几乎所有的 build 类型".在当今这个软件语言和各种框架飞速发展的时代 ...

  2. 2.1 -1.0 Xcode(发布时间、使用、快捷键、插件相关)

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 1.0 Xcode 发布时间 版本 iOS 版本 手机 日期 特殊介绍 Xcode 3.1 ...

  3. NopCommerce架构分析之四----插件机制

    NopCommerce支持灵活的插件机制,所谓Web系统插件,其实也就是可以像原系统的一部分一样使用. Web系统的使用方式就是客户端发送一个请求,服务端进行解析.在asp.net MVC中对客户请求 ...

  4. FastAdmin CMS 插件相关文章收集(2018-08-16)

    FastAdmin CMS 插件相关文章收集(2018-08-16) CMS内容管理系统(含小程序) 介绍 https://www.fastadmin.net/store/cms.html CMS内容 ...

  5. Cordova插件相关常用命令

    一,插件相关常用命令   1,查看所有已经安装的插件 1 cordova plugin ls 2,安装插件(以camera插件为例) 1 cordova plugin add cordova-plug ...

  6. nopcommerce插件相关

    注意Description.txt中,以下字段必须配置当前可用.我抄人家代码的时候,人家是3.4   我也配成3.4,结果我的nop是3.7的,后台半天显示不出来插件,浪费了一下午.

  7. NopCommerce用.net core重写ef

    最近看了NopCommerce源码,用core学习着写了一个项目,修改的地方记录下.项目地址 NopCommerce框架出来好久了.18年的第一季度 懒加载出来后也会全部移动到.net core.那么 ...

  8. 【原创】MVC项目中使用JQuery的upladify图片上传插件相关问题的解决方案

    一. 关于Uploadify Uploadify是一个jQuery插件,你可以很容易的为你的网站添加多个文件上传功能.有两个不同的版本(HTML5和Flash)允许你灵活选择为您的网站和回退方法正确实 ...

  9. ASP.NET MVC 下使用支付宝支付接口 以及 ASP.NET Core 下相关改造支付

    通过nuget首先引用AopSdk.dll 包 下面写的是 Asp.Net MVC 下相关的支付接口 APP支付 配置客户端相关的参数,配置成自己的代码就可以了 private string APPI ...

随机推荐

  1. Java面向对象内存分析

    title: Java面向对象内存分析 date: 2018-07-28 11:12:50 tags: JavaSE categories: - Java - JavaSE 一.Java虚拟机的内存区 ...

  2. 优雅的使用Linux

    优雅的使用Linux 系统安装 启动盘制作 通过rufus烧制官网镜像,注意根据自己系统的引导模式选择相应模式,不确定的,可以在windows中通过Win + R 快捷键调出"运行" ...

  3. 比原链(Bytom)先知节点 Ubuntu接入文档

    系统要求 我们建议选择知名的VPS服务商,运行比原链节点对算力没有要求,但是请配置尽可能大的磁盘空间. 节点服务器最小配置: 操作系统: Windows/Linux/Docker CPU: 2核 内存 ...

  4. SpringBoot和druid数据源集成Jpa

    1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  5. Docker介绍及使用

    什么是容器? 容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁.隔离的环境拥有自己的系统文件,ip地址,主机名等,kvm虚拟机,linux,系统文件 程序:代码,命令 进程:正在运行的程 ...

  6. python程序—名片管理系统

    创建一个名片管理系统,实现增.删.改.查.四项功能 listcard = [] while True: print('**********欢迎来到名片管理系统**********') print(' ...

  7. VC++调试错误的解决方案

    这篇文章主要用来记录使用Visual Studio过程中,出现的各种error,并提供自己当时解决的方案.但是,一个error可能由不用原因引起的,文中案例仅供大家参考. nafxcwd.lib(th ...

  8. Ubuntu 18.04.1安装Nginx

    一.安装Nginx所需的环境 Ubuntu可以通过apt源安装以下依赖库,CentOS可以通过yum安装 1.Nginx是C语言开发,需要gcc依赖库 先检查本机是否有gcc环境 gcc -v 如果没 ...

  9. [CentOS_7.4]Linux编译安装ffmpeg

    [CentOS_7.4]Linux编译安装ffmpeg   安装过程: 下载安装源,配置,编译,安装,设置环境变量. # wget http://www.ffmpeg.org/releases/ffm ...

  10. 'telnet' 不是内部或外部命令,也不是可运行的程序

    1.打开控制面板 2. 3. 4.这样就好可,重新打开cmd命令.