前言:
雖然容器眾多但要解決的問題和概念是一樣
今天使用Autofac 介紹一下IoC容器
不了解 IoC 概念可參考 我之前寫 IOC(控制反轉),DI(依賴注入) 深入淺出~~
Autofac是一個 Ioc 容器
眼尖的讀者會發現我把Ioc跟容器這兩個字使用兩個不同顏色
原因是Autofac這個框架其實做到兩個概念.
- IoC(Inversion of Control)
- 管理物件的容器
雖然容器眾多但要解決的問題和概念是一樣
今天使用Autofac 介紹一下IoC容器
不了解 IoC 概念可參考 我之前寫 IOC(控制反轉),DI(依賴注入) 深入淺出~~
眼尖的讀者會發現我把Ioc跟容器這兩個字使用兩個不同顏色
原因是Autofac這個框架其實做到兩個概念.
之前有和大家分享使用CASE WHEN 搭配聚合函數實現樞紐分析
但今天如果我們要轉換成行的列希望是動態依照目前資料庫的欄位要處理呢?
我們可以使用Dynamic pivot
``Dynamic pivot 核心概念其實是把我們要使用的
pivot SQL`語法動態產生出來
CREATE TABLE T(
userName VARCHAR(100),
Price int,
Dt DATE
);
INSERT INTO T VALUES ('Tom',100,'2017-01-01');
INSERT INTO T VALUES ('Amy',200,'2017-01-02');
INSERT INTO T VALUES ('Tom',1311,'2017-01-03');
INSERT INTO T VALUES ('Tom',122,'2017-03-01');
INSERT INTO T VALUES ('Tom',111,'2017-04-01');
INSERT INTO T VALUES ('Amy',232,'2017-05-01');
INSERT INTO T VALUES ('Tom',2312,'2017-05-02');
INSERT INTO T VALUES ('Tom',23,'2017-05-03');
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @SQL = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)
FROM T
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'');
SET @query = 'SELECT userName,'+@cols+' FROM T GROUP BY userName' ;
EXECUTE sp_executesql @query
因為範例我們使用 SQL SERVER
所以使用 FOR XML PATH 語法將我們** CASE WHEN pivot SQL **語法產生並把他附值給 @cols
變數
SET @cols = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)
FROM T
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'')
某些專案因為歷史久遠沒有Source Code,但有個需求需要異動裡面的程式該怎麼辦??
難道只能整個反組譯,查看程式碼翻一份做新的嗎?
不~~其實有辦法直接對於DLL進行修改
只需使用 ** Reflexil 搭配 ILSpy 或其他支援的反組譯軟體 **
Reflexil 是一個組譯編輯器插件目前支援 Reflector, ILSpy 和 Telerik’s JustDecompile.
下載連結
Reflexil **Release 2.2 搭配 ILSpy version 3.2
之前有介紹 (SQL Server) CTE RECURSIVE (遞迴)製作月曆 在Oracle
有提供一個精簡的語法產生階層資料 CONNECT BY
CONNECT BY 有幾個常用Key Word.
LEVEL
目前在樹節點第幾階層START WITH
設定哪筆做為起始點開始樹PRIOR
用於指定父資料欄位製造出的階層樹,概念如下
[圖來自Oracle]
<code class="language-sql">SELECT X + LEVEL
FROM (
SELECT 0 X
FROM DUAL
)
CONNECT BY LEVEL <= 10
此範例使用 LEVEL
在 CONNECT BY
上當條件 建立列值到LEVEL
大於等於 10
本篇利用RabbitMQ client來簡單實現MQ功能.
在RabbitMQ中有很重要兩個角色,Producer
和Consumer
,下面這個範例使用c# console
來實現.
我個人覺得APMQ協議和Http協議有點類似,一樣有Header(Properties),body…等等概念.
一開始我們宣告一個 ConnectionFactory 並設置RabbitMQ Server連接參數
RabbitMQ預設密碼是 guest
//建立連接工廠
ConnectionFactory factory = new ConnectionFactory
{
UserName = "guest",
Password = "guest",
HostName = "localhost"
};
呼叫factory.CreateConnection
建立連接RabbitMQ連接物件,並呼叫 CreateModel
方法建立一個channel
Model
在Github這邊要先建立兩個Repository
這個Repository是利用Hexo cli樣板來撰寫Blog.
像我目前使用的MyBlog
建立完自己的Code Repository後.
將他clone到自己電腦上面.
執行下面幾個步驟
CMD
並進入此資料夾NodeJS NPM
打 npm install hexo -g
就會開始下載 Hexo init
指令,安裝看建立Hexo將檔案.網路上已經有許多Blog託管平台 例如:Google Blog,痞客邦….為何我還要自己寫這篇跟大家分享?
因為上面提供的平台固然好用,但我並無法100%的去修改我想要的樣式或版面.
如果我想要有100%彈性修改我的Blog我就必須建立自己的網站.
但要給別人Hosting需要另外花一筆費用…
就有本次系列文 Github (hosting) + Hexo (Blog) + Appveyor(CICD)
.
這個搭配有幾個優點:
撰寫發布流程大概如下圖