控制器构造函数:
IRestaurantData db;
public HomeController(IRestaurantData db)
{
this.db = db;
}
//容器代码
public class ContainerConfig
{
internal static void RegisterContainer(HttpConfiguration httpConfiguration)
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterApiControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<InMemoryRestaurantData>()
.As<IRestaurantData>()
.SingleInstance();
var container = builder.Build();
// MVC CONTROLLER VERSION
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
// WEBAPI CONTROLLER VERSION
httpConfiguration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
}
因此,我试图围绕控制反转容器的工作方式进行总结。我所学的课程是使用Autofac创建这些容器。从我目前的理解来看,创建此容器的目的在于使我使用IRestaurantData实例化HomeController时,该容器每次使用时都指向AT InMemoryResataurantData接口。我能理解的非常多。我还感到困惑的是,我不理解我的控制器实际上正在实例化的程序在哪里?有人知道吗?
这是由autofac完成的。每当您从容器请求一个类时,它将使用默认构造函数为您实例化类型。如果您有一个带参数的构造函数,它将在容器中查找其他注册的类型,并将实例化一个新对象或获取一个已使用的对象。
您的实例化类型可以是短暂的(短命的)。
简而言之;当请求对象时。