索引
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目 目錄索引
簡述
總結一
整個系列其實還包括項目管理、考勤簽到、郵件、內部聊天等等,這個東西是做不完的,如果繼續還有新聞系統、靜態生成等等等等....
其中,靜態頁生成在我的博客中可以找到,三種方式:
第一種 就是類似網上的很多CMS一樣 采用標簽替換,但這種方式是不推薦的,特別是在我們.Net中,標簽解析是十分龐大和困難的;
第二種 是使用RazorEngine 解析我們的cshtml頁面,這種使用十分簡單,直接讀取地址生成html就行了;
第三種 也是我使用的,解析html模板(Razor語法的html模板)然后通過RazorEngine 解析,這個是十分簡便的,RazorEngine 會直接識別html中的語法。
。。。。我想,很多朋友已經等不急了。。。並且,后面的什么項目管理啊、郵件啊之類的 都是業務邏輯,不斷的重復我們的東西,使用到的基本都講過了,所以也是沒有很大的必要性。
所以,我們分為兩章來總結一下這個系列:
第一章總結完,我會分享整個數據庫和已發布之后的程序供大家測試和抽取UI
第二章總結完 我會把程序源碼分享給大家。
為什么第一章不分享源碼呢?因為我還沒有整理好,比如倉儲類實際上沒有UnitOfWork,對性能是十分不好的,我要改,很多朋友無數次的要完整的東西,所以先把發布之后的程序和數據庫給大家,就當開胃菜,整理好之后全部分享。分享之后的源碼僅供大家參考,請不要直接拿來使用,因為很多東西比如DDD的設計、UnitOfWork 都是沒有完全實現的,大家可以關注
【無私分享:ASP.NET CORE 項目實戰】目錄索引 這個系列,在這個系列中我們會重構我們的思想,並且修改基礎操作類(重新開發,沒有在本系列中沒有看懂倉儲類庫Repository的可以重點看下),實現對架構和性能的追求。
好了,廢話不多說。
首先呢,我們來講下依賴注入(DI):
在我們這個系列中,我們是通過Spring.net 來實現的(在Asp.net Core中已經底層支持【無私分享:ASP.NET CORE 項目實戰(第二章)】添加EF上下文對象,添加接口、實現類以及無處不在的依賴注入(DI)),大家最有印象的應該就是xml的配置。我們來看下Web.config:

我們重點看下 Spring配置指向,這里有算是兩類指向,一類是webpage的指向(我們的應用程序層webpage),一類是Service的指向(我們的應用服務接口層)

我們建了很多xml文件,例如 ComService.xml、MailService.xml ,創建這些xml的目的其實跟我們建文件夾是一樣的,就是為了分類管理,建一個也是可以的,並不是一定要建這么多。
包括webpage\config下的xml 這些作為Spring配置的xml 都應該修改為“嵌入的資源 ”

我們來分別講下webpage/config 和 service\config 里面的xml,這里用通俗容易理解的方式講下,希望大家不要扣字。
我們先來看下service\config 里面的xml,我們以Service.xml為例:

我們看下格式:
<object id="Service.Permission" type="Service.ServiceImp.PermissionManage,Service" singleton="false"></object>
<object id="定義一個唯一的名字" type="接口實現類,Service" singleton="false"></object>
名字自己定義一個就可以,沒有什么特別的規范,只是要唯一,我們在webpage\config 里要用到這個名字,兩者保持一致便可。
接口實現類就是命名空間+實現類的類名,以上面的(Service.ServiceImp.PermissionManage)為例,我們看下我們這個實現類:

這樣,Service\config 下面的xml如何配置,大家知道如何使用了吧。那我們再來看下webpage\config 里面的xml配置,我們以Controllers.xml為例:

我們看下格式:
<!--登錄控制器-->
<object type="WebPage.Areas.SysManage.Controllers.AccountController,WebPage" singleton="false">
<property name="UserManage" ref="Service.User"/>
<property name="UserOnlineManage" ref="Service.UserOnlineManage"/>
</object>
<!--登錄控制器-->
<object type="控制器,WebPage" singleton="false">
<property name="聲明的容器名稱" ref="在配置Service\config時定義的id"/>
<property name="聲明的容器名稱" ref="在配置Service\config時定義的id"/>
</object>
首先,我們添加一個object標簽 type 我們的控制器
<object type="WebPage.Areas.SysManage.Controllers.AccountController,WebPage" singleton="false">
</object>
然后,我們這里需要用到兩個接口:一個是用戶管理,一個是用戶在線狀態
那么我們添加兩個 property標簽:
<property name="UserManage" ref="Service.User"/>
<property name="UserOnlineManage" ref="Service.UserOnlineManage"/>
注意:這里property 的屬性 name 的值 要跟控制器里聲明的容器的名稱一致

這樣,就實現了。然后,有朋友問,一定要這么復雜的配置么?其實,service\config里配置完,在webpage\config里不配置也是可以的,那么不配置Controllers.xml 如何調用呢?細心的朋友可能已經發現了,我們在BaseCotroller控制器里就沒有使用xml配置,在webpages\Models\CommonHelper.cs中也沒有使用xml配置:


對於Spring的使用,詳細的講解和專業的術語如何表述,請大家移步度娘。
我們再來看下大家也是有很多問題的UserManage實現類:
//用戶登錄驗證
public Domain.SYS_USER UserLogin(string useraccount, string password) 這個應該沒什么可講的,大家都一目了然。
//是否為超級管理員
public bool IsAdmin(int userId) 這個就一點說明一下 return roles.ToList().Any(item => item.ID == ClsDic.DicRole["超級管理員"]) 這里是用到了字典(是不是比較雞肋),我們在應用類庫Common下的Enums.cs中有這么一個
也是就判斷我們當前登錄用戶的ID是否等於我們定義的超級管理員的ID。
然后,我們再來看下 public Account GetAccountByCookie() 和 public bool Remove(int userId) 這兩個是一樣的,這兩個都調用了外部接口,我們看下我們這個類的開始部分

大家是不是在使用的時候會出現這么一個錯誤:未將對象引用到實例?
包括在控制中,我們調用接口的時候,出現這個錯誤,大部分的原因就是:沒有注入。
控制器的注入我們上面剛剛講過了,我們看下接口調用外部接口是如何注入的。service\config\service.xml

大家發現了吧 我們在object標簽下 也添加了property標簽。上面我們講過了控制器如何不使用xml實現注入,這里大家是否也可以嘗試一下。
好了,已發布的項目和數據庫:百度網盤
網盤已失效,再發第二次,希望大家抓緊:百度網盤
額。。。上面都失效了,還有這么多要的,最后發一次網盤:百度網盤
---- 統一回復 提取碼:z2qn
說明:大家可以直接放到IIS里架起來,數據庫在App_Data\DataBase 里面。
數據庫連接需要修改兩個地方:① web.config 里面的數據庫連接 ② log4net.config 里面的數據庫連接 (我們的日志不是存在txt里是存到數據庫里的)
還有,這個是單點登錄,如果不需要,請修改config\website.config 找到 <add key="IsSingleLogin" value="True"/> 改為False
不好意思,忘了說登錄賬號和密碼了,admins Yuan19880212
原創文章 轉載請尊重勞動成果 http://yuangang.cnblogs.com
