1. 程式人生 > >【C#MVC】.NET中的IOC--Autofac簡單使用

【C#MVC】.NET中的IOC--Autofac簡單使用

Autofac是.NET世界中的IOC容器,據說是效率最高的IOC。
使用IOC的優點大家很清楚,不太懂的請移步百度。由於我的部落格最主要的目的之一是為了給自己看,以便以後使用,所以裡面例子會多一點,講解很少,有些我理解的就一筆帶過了。

因為我學習Autofac,在網上檢索時,大部分人做例子總會先說Interface解耦,然後才引出IOC。我只想說IOC跟Interface貌似沒多大關係。IOC只是將物件的控制權進行翻轉,由原來的主動獲取,變為由IOC注入,跟Interface有什麼關係…這樣寫便有點誤導人了,好像覺得,使用IOC不用Interface跟不對似得。實際上作為我來說,我使用IOC的目的很單純,就是統一管理,加大程式的靈活性和可維護性。其他都是扯淡。理想的解耦固然好,但是不能過度追求解耦。甚至有些對物件的生成效率有要求的程式還要考慮是否使用IOC呢,因為IOC對物件的生成效率是有一定的影響的。
在這之前先記錄一下,對Interface使用的一點理解。當然是以我目前的水準的理解。是對當前的一點記錄。若有不對,請指正。
無論是我以前在學習JAVA還是現如今的.NET。對Interface的使用並不是很廣泛。也並沒有什麼太大影響。當然是以我目前接觸的專案來看。按照Interface設計理念是可以很好地解耦的,但是我覺得在某種程度上,如果專案不改動不大,若盲目的使用Interface也是一種病態的追求心裡。只能說取捨著使用。對於經常變動的部分使用Interface進行隔離,但是也並非是每個service、每個manager都需要一個Interface去對應,這樣靈活性反而更差。
上面也說了很多,目的之一就是讓自己以後明白,使用IOC跟是否使用Interface沒有半毛錢關係,反轉的是物件的控制權,Interface是物件,非Interface也是物件。
引入Autofac.dll,Autofac.Configuration.dll。
1.在Global.asax檔案中新增:

  protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            var builder = RegisterAll();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build()));
            WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } public ContainerBuilder RegisterAll() { var builder = new ContainerBuilder();
Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray(); Type baseType = typeof(IDependency); builder.RegisterAssemblyTypes(assemblies) .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract) .AsSelf().AsImplementedInterfaces() .PropertiesAutowired().InstancePerLifetimeScope(); builder.RegisterControllers(assemblies).PropertiesAutowired(); return builder; }

掃描所有dll,然後為實現IDependency介面的類,進行IOC註冊,當然還有其他註冊方式,我覺得這是一種簡單的註冊方式。

2.注入方式:
預設支援建構函式注入。
屬性注入需要在註冊元件是加入PropertiesAutowired()方法即可。

相關推薦

C#MVC.NETIOC--Autofac簡單使用

Autofac是.NET世界中的IOC容器,據說是效率最高的IOC。 使用IOC的優點大家很清楚,不太懂的請移步百度。由於我的部落格最主要的目的之一是為了給自己看,以便以後使用,所以裡面例子會多一點,講解很少,有些我理解的就一筆帶過了。 因為我學習Autof

C#MVC使用ajaxFileUpload匯入Excel,並顯示在Grid

學習瞭如何使用ajaxFileUpload(無重新整理上傳)匯入Excel檔案,並在頁面中顯示出來。C#,asp和MVC操作形似,這裡重點說MVC,asp只貼出來程式碼。 準備:在頁面引入js檔案。 Step1:(ajaxFileUpload是一個開

C#MVC搭建.netMVC4工程(四)錯誤詳解-ErrorGeneratingOutput

遇到一個問題,不知道各位有沒有遇到過。在網上搜索沒有中文的解決方案。 問題描述: 解決辦法:在你的系統變數中找到名為VS120COMNTOOLS的變數: 去你們本地的資料夾(每個人根據安裝目錄不一致,可能不太一樣),你會發現在指向的目錄下沒有錯

C++筆記函式引數傳遞

函式中引數是如何傳遞的呢? 在《C++Primer》一書中提到: “Each time we call a function, its parameters are created and initialized by the arguments passed in the

C#MVC 使用HttpWebRequest訪問外部API,並返回json資訊 (Access_Key)

在c#中呼叫外部API或者自己系統的API都是很簡單的,這裡提供使用HttpWebRequest的方式訪問外部API,自定義了頭部Access_key. 若外部系統沒有此安全驗證,可以去掉。

C語言統計數字在排序數組出現的次數

語言 個數 統計 ret r+ () class tdi times //數字在排序數組中出現的次數。 //統計一個數字在排序數組中出現的次數。比如:排序數組{1,2,3,3,3,3,4,5}和數字3,因為3出現了4次,因此輸出4. #include <stdio

spring mvc後臺的API,測試,總提示接口實體的某一個字段不能為null,但是明明給值了還提示不能為空

ont TP 報錯 分享 ima 技術 技術分享 圖片 request 實體是這三個字段 接口的實現類Controller 前臺測試給值 依舊報錯 解決方法: 需要添加@RequestBody註解 【spring mvc】後臺的API,

springspring mvcspring boot獲取spring cloud項目所有spring mvc的請求資源

sea ams other figure upd ring false 調用 tom 實現的方法: 1.在父級項目中 或者 每個微服務都引用的項目中添加實體類Resource 2.在父級項目中 或者 每個為服務都引用的項目中寫一個工具類,作用是用來獲取請求資源 3.在每一個

C#/WPF保存BitmapImage數據到文件

key 數據保存 路徑 pen files class 保存 lin mod 原文:【C#/WPF】保存BitmapImage數據到文件中 參考: http://stackoverf

C語言統計一個字串字母、數字、空格及其它字元的數量

統計一個字串中字母、數字、空格及其它字元的數量 解法1: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void Count(con

c語言從字串str擷取一個子串,要求子串是從str的第m個字元開始 由n個字元組成

#include<stdio.h> #include<string.h> /* 編寫程式:從字串str中擷取一個子串,要求子串是從str的第m個字元開始 由n個字元組成 程式理解: 需求中要求的是從一個字串中擷取固定的長度 m---->是開始的個數 n---->是

C語言向建立的 d:\\demo.txt 檔案追加一個字串。

#include<stdio.h> int main() { FILE *fp; char str[102] = { 0 }, strTemp[100]; if ((fp = fopen("D:\\demo.txt", "at+")) == NULL) {

MVC.Net實踐(一)—建立mvc框架的專案和實體模型

一、 建立MVC框架的專案 (1)像新增平常專案一樣新增一個web應用程式,檔案—>新建—>專案 (3)接著選擇MVC (4)這樣就建好一個MVC框架的專案了 二、連線資料庫 建立

MVC.NET實踐(三)—對資料庫的資料進行刪除與修改

在主介面新增修改和刪除的超連結(Index.cshtml) <table id="tbList"> <tr> <th>id&l

MVC.NET實踐(四)—新增資料到資料庫

1、在主介面Index.cshtml新增“新增”的連結 <tr> <td colspan="4"> @Html.ActionLink("新增",

C語言實際專案開發過程常用C語言函式的9大用法

C語言是當中最廣泛的計算機程式語言,是所有計算機程式語言的祖先,其他計算機程式語言包括當前流行的Java語言,都是用C語言實現的,C語言是程式設計效率最高的計算機語言,既能完成上層應用開發,也能完成底層硬體驅動程式設計,在計算機程式設計當中,特別是在底層硬體驅動開發當中,具有不可替代的作用。

C#重構——模板方法在組合查詢的實踐

什麼是模板方法: 模板方法模式,定義一個操作中的演算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可衝定義該演算法的某些特定步驟。 有趣易懂的解釋: 推薦部落格:作者:Carson_Ho ,原文:模板方法易懂解析 背景:

MongoDB學習-在.NET簡單操作

using MongoDB.Driver; using System; namespace DAL { public class MongoDb { public MongoDb(string host,string timeOut) { this.CONNE

C語言用結構體陣列指標完成:有三個學生資訊,存放在結構體陣列,要求輸出全部資訊

//用結構體陣列指標完成:有三個學生資訊,存放在結構體陣列中,要求輸出全部資訊 #include <stdio.h> struct Stu { int num; char name[2

C語言一個數組只有兩個數字是出現一次,其他所有數字都出現了兩次。 找出這兩個數字,程式設計實現。

一看到這道題,我想到了之前學習過的異或。我們知道兩個相同的數字異或的結果是 0,因為在計算機中,異或運算是按照二進位制位來運算的,相同為 0 ,相異為  1。任何數與 0 異或都等於它自己。既然我們要找出來一組數中不同的兩個數字,也可以採用這種方法。 但是這次不是直接異或,