我刚刚开始试用Autofac,我觉得我在解决具体课程时感到困惑。
我已设法将我的接口注册到我的Concrete类,如下所示
builder.RegisterType<TestClass>().As<ITest>();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
这很好。我遇到的问题是如何在我的mvc控制器中获取此实例?我读过的大多数内容都说我需要创建一个新的ContainerBuilder实例,然后调用scope.Resolve方法,但这肯定是不好的做法,并且每个控制器都不需要它?
我认为混淆是何时以及如何访问'Container'以便我可以在需要时调用resolve方法。
我可能已经猜到了,这是一个新手!
答案 0 :(得分:9)
一种方法是使用控制器构造函数,因为Autofac将为您处理:
public class MyController : Controller
{
private ITest _test;
public MyController(ITest test)
{
_test = test;
}
}
如果您不想使用构造函数并为您注入依赖项,可以在控制器操作方法中执行此操作:
var test = DependencyResolver.Current.GetService<ITest>()