IoC控制器实际上如何工作?特别是在.NET MVC中?

问题描述 投票:-1回答:1

控制器构造函数:

    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接口。我能理解的非常多。我还感到困惑的是,我不理解我的控制器实际上正在实例化的程序在哪里?有人知道吗?

c# .net model-view-controller autofac
1个回答
0
投票

这是由autofac完成的。每当您从容器请求一个类时,它将使用默认构造函数为您实例化类型。如果您有一个带参数的构造函数,它将在容器中查找其他注册的类型,并将实例化一个新对象或获取一个已使用的对象。

您的实例化类型可以是短暂的(短命的)。

简而言之;当请求对象时。

© www.soinside.com 2019 - 2024. All rights reserved.