2014-10-17 53 views
2

我剛開始嘗試使用Autofac,我認爲自己在解決具體的類時感到困惑。如何使用Autofac和Asp.Net解決實例MVC

我設法我的接口註冊到我的具體類如下

builder.RegisterType<TestClass>().As<ITest>(); 
var container = builder.Build(); 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

這建立罰款。我遇到的問題是如何在我的mvc控制器中獲得這個實例?我讀過的大部分內容都說我需要創建一個新的ContainerBuilder實例,然後調用scope.Resolve方法,但是這肯定是不好的做法,不應該在每個控制器中都需要?

我覺得困惑是何時以及如何訪問「容器」,以便我可以在需要時調用解析方法。

我是一個新手,因爲你可能已經猜到了!

回答

6

一種方式來做到這一點是使用控制器構造函數Autofac將您處理該問題:

public class MyController : Controller 
{ 
    private ITest _test; 

    public MyController(ITest test) 
    { 
     _test = test; 
    } 
} 

如果你不想使用構造,讓依賴注入得到你,你可以在你的控制器動作方法中做到這一點:

var test = DependencyResolver.Current.GetService<ITest>() 
+0

好吧,這看起來不錯。所以假設我想在特定的操作中解析控制器中的一些依賴項,那麼我必須正確使用方法2? – Raj 2014-10-17 13:09:26

+0

是的,儘管我更喜歡方法1,因爲它更容易測試。 – DavidG 2014-10-17 13:12:55

+0

是的,我見過很多人提到這是一種反模式。你可以使用方法1,但有多個依賴關係嗎? – Raj 2014-10-17 13:17:30

相關問題