个人权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(五)框架及Web项目的组件化

1、组件化印象

一、先给你们看一张截图css

image

若是我告诉你们,这就是一个web管理系统发布后的全部内容,大家会不会以为太简洁了,只有一个web.config、一个Global.asax文件,其它的都是dll文件,没有aspx、cshtml、html页面,没有js css images文件,但它的确能跑起来,跑起来以后的截图以下html

image

二、再看我新建一个项目的流程web

新建一个ASP.NET MVC 4的空的项目数据库

image

image

点肯定以后,建立项目,默认的项目目录结构以下api

image

而后打开nuget包管理界面,选择咱们须要安装的组件 Zephyr.Web.Sys,这是咱们权限管理系统服务器

image

点安装进行安装,实现上就是引入dll文件mvc

image

安装完成后,直接F5运行,就出现了如下页面框架

image

点建立后ide

image

咱们选择MySql输入相应的数据库信息测试链接经过后,点建立工具

image

建立成功

image

如今登陆跳转到登录页面

image

登陆成功后

image

权限系统中页面测试都没有问题

image

而后咱们回过头看程序,什么都没改变,

image

只是增长了一些引用及web.config中添加了一些信息。

image

那回过头来,这样发布后,不就是咱们以前所看到了什么都没有的Web应用程序了

image

你们是否是也是很感兴趣,我当时也只是一个想法,但直正驱动我去完成这些功能的仍是如下几点:

a 代码的重用性提升,能够很方便的用NuGet管理类库或系统。即便不用NuGet管理,直接把dll文件拷贝到新建项目的bin下面,而后修改下web.config也是能够的。比之前咱们引用项目的方式方便不少。

b 建立一个新项目时只须要安装组件便可

c 发布后的程序干净,项目更新只需覆盖对应的dll便可。

d 更方便作成产品发布

 

2、NuGet操做

那么咱们要作到前面所看到的,咱们要作哪些工做?

一、准备好要组件化的的类库

image

二、建立Nuget包

建立NuGet包有不少种方法,我采用的是编译时自动生成NuGet包,

首先要启用NuGet包还原功能(Eable NuGet Package Restore),而后VS会自动下载添加一个.nuget的文件夹

image

而后编辑项目工程文件,添加最后一行<BuildPackage>true</BuildPackage>

image

而后编译后就会在bin目录下发现一个后缀为nupkg的文件,这就是咱们要的nuget包

image

固然你也能够在程序包管理器控制台输入命令行进行打包
也能够下载一个图形化的打包器nuget package explorer

三、推送到NuGet服务上

你能够在https://www.nuget.org/注册上账号,放在nuget官网上
也能够本身搭建一个NuGet服务器:新建一个空项目,安装NuGet.Server而后直接发布就能够了。具体教程网上也不少了。

上传NuGet包只须要执行如下命令
nuget push Zephyr.Core.2.0.0.0.nupkg -s http://192.168.1.100:8888

到这里就已经ok了,你能够在Nuget包管理界面中添加一个程序包源服务地址,而后就能够安装你刚刚上传的包了

 

3、打包Web应用会碰到的问题

一、资源的嵌入

资源的嵌入分两种,一种是静态资源,直接内嵌到程序集中
第二种是动态的页面,能够预编译成类放到程序集中

image

 

二、资源的访问

获取嵌入资源的访问地址

public static string GetResourceUrl(Type type string embedFileName)
{
var page = new Page(); return page.ClientScript.GetWebResourceUrl(type, embedFileName); }

固然你也能够经过controller去处理

[AllowAnonymous]
[MvcMenuFilter(false)]
[WebFrameworkFilter]
public class ResourceController : Controller
{
    public ActionResult Index()
    {
        var assemblyName = ResourceVirtualPathProvider.ResourceVirtualPath.GetAssemblyName(Request.Path);
        var filename = ResourceVirtualPathProvider.ResourceVirtualPath.GetResourceName(Request.Path);
        var assembly = ReflectionHelper.GetAssembly(assemblyName);

        var stream = ResourceHelper.GetFileStream(assembly,filename);
        var contentType = ResourceHelper.GetContentType(filename);

        if (stream == null)
            return HttpNotFound();

        return File(stream, contentType);
    }
}

4、框架组件化操做

个人框架Zephyr.Net主要分为:

类库 描述 依赖
Zephyr.Utils 工具类库  
Zephyr.Library 经常使用其它类库  
Zephyr.Data 数据库访问组件  
Zephyr.Core 框架核心类 Zephyr.Utils Zephyr.Library Zephyr.Data
Zephyr.Web.Resource 静态资源  
Zephyr.Web.Mvc 纵云Mvc框架 Zephyr.Core
Zephyr.Web.Sys 权限管理系统 Zephyr.Web.Mvc

以上是七个独立的项目,依赖关系也不直接引用项目,而是从nuget上引用发布程序包,

其中前面四个是类库
Zephyr.Web.Resource是嵌入静态资源的程序集,若是不引入这个文件,直接把静态资源文件夹拷贝进项目中也是能够的。
Zephyr.Web.Mvc是咱们的Mvc框架基础,已经包括了mvc及web api不少的路由注册过滤器设定等设置,而且有Login页面和Index页面,安装了这个组件,即便不安装纵云权限系统组件,程序也同样能够跑起来,只是没有权限系统,是个空的架子。
Zephyr.Web.Sys就是权限系统了,把权限系统的mvc及webapi控制器、View页面、js以及数据库初始化处理都放在这个程序集中。
之后咱们开发新的项目也能够作成跟这个权限系统同样,都放在一个dll中(固然也能够分多个,把controller model等都分红不一样的层),之后只要引入或者bin下面放入这个dll就会动态引入这个模块,很是方便。

打包成nuget packages发布到nuget服务上,大功就告成了,若是有更新,只须要更新版本号从新发布就好了

image

这样一来,基本就把个人框架以及权限系统都作成组件了,若是新项目须要引入,或者多个项目升级都很方便了。

.NET框架交流群(三)  21549700

相关文章
相关标签/搜索