關於mvc裡面的依賴注入和ninject的使用

2021-09-25 11:32:36 字數 2189 閱讀 7400

可能第一段話比較難理解,先看乙個例子:

有乙個傳送郵件的介面(iemailsender):

public inte***ce iemailsender

需要乙個類(myemailsender)來實現這個介面:

public class myemailsender : iemailsender

}

然後我們在需要發郵件的時候,通常就這樣做了:

iemailsender mysender = new myemailsender();//引入了介面類,和實現這個介面的方法的類

mysender.sendemail("123");//為了使用sendemail,我們引用了兩個類

從上面的**可以看出,我們為了呼叫乙個發郵件的方法,使用了兩個類,如果myemailsender這個類改了名字或者修改了話,就要這裡也要改,大牛們就說,這個的耦合性太高,不好,應該做到只關聯介面,但是這不可能,我甚至覺得,不要用介面不就好了嗎?確實開發有時候用的介面也不多,就寫個普通類就好,但是,大神的世界我們不懂,介面也有介面的好處,介面就是要依賴於這個實現介面的類的,所以,依賴注入就是解決這樣的情況。

個人理解:當使用介面的方法的時候才考慮使用依賴注入。

具體mvc裡面怎麼用,可以使用乙個第三方dll,ninject,github:

建議使用nu'get獲取即可。

介面類和實現介面方法的類不需要修改,主要修改的是呼叫的時候:

//1:建立乙個ninject的核心

ikernel ninject = new standardkernel();

//2:就是配置ninject核心,其實就是將實現類和介面類繫結在一起

ninject.bind().to();

//3:最後一步就是使用ninject建立乙個物件了

iemailsender mysender = ninject.get();

mysender.sendemail("123");

所以在mvc裡面:

初始化的注入類:ninjectcontrolle***ctory

以後所有的介面和實現介面方法的類都繫結在這裡了

public class ninjectcontrolle***ctory : defaultcontrolle***ctory

private void addbindings()

protected override icontroller getcontrollerinstance(system.web.routing.requestcontext requestcontext, type controllertype)

}controllerbuilder.current.setcontrolle***ctory(new ninjectcontrolle***ctory());

這是第一種方法,第二種是這樣:

public class ninjectresolver : idependencyresolver

public ienumerablegetservices(type servicetype)

public object getservice(type servicetype)

void addbinding()

}dependencyresolver.setresolver(new ninjectresolver());//註冊ioc容器

兩種都可以,記得global裡面的**更換就行

然後在控制器裡面就可以通過建構函式獲得了,具體為什麼也說不清,網上查的就是這樣:

private iemailsender _sender;

public homecontroller(iemailsender sender)

public actionresult index()

其實可以看出,是真的沒有引用到myemailsender這個類,把他們放在一起了,其實說到最後,這樣是不是好的做法,不敢說,說不定以後有更好的方法,現在大家都這樣用,就這樣了,並且.net core的依賴注入更加強烈了,不需要使用ninject了,微軟直接整合了,回頭再重複看看,以前core時候的注入看的一臉懵逼。

關於channel裡面的策略

關於channel裡面的策略 channel裡面的配置主要在data.data 0 pyload.data.config裡面。config是由groups遞迴形成的。groups的結構如下 groups 下一層 mod policy 當前層發生改變時,需要執行的策略名稱 policies 當前層策略...

關於爬蟲裡面的Cookie

把cookie放到headers中直接登入獲取資料 把cookie單獨拿出來利用字串切割轉換成字典然後放到請求的url中進行請求響應獲取引數 cookie dict requests.get url,headers headers headers,cookies cookie dict a b if...

關於Struts裡面的actionForward

1.actionforward的作用 封裝 路徑,通俗點說就是說完成頁面的跳轉和轉向。那它既然是轉向,到底是 還是重定向呢?預設的情況下,actionforward採用的是 的方式進行頁面跳轉的。2.給自己加深下印象,說一下 和重定向的區別。最大的區別就是 的時候,頁面的url位址不變,而重定向的時...