2014-10-17 51 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

相关问题