美文网首页
C# 在 ASP.NET 中使用依赖注入框架 Autofac 的

C# 在 ASP.NET 中使用依赖注入框架 Autofac 的

作者: 字母数字或汉字 | 来源:发表于2016-04-09 03:13 被阅读1510次

    刚从 PHP 这种动态语言转移到 C# 这样静态语言的开发总是有些不适应,我在 PHP 里没有尝试过依赖注入框架,这次搞 ASP.NET 开发打算小试一番。

    在这里,我采用了业界赫赫有名的 Autofac。

    步骤如下:

    1. 使用 nuget 安装 Autofac
    2. 在 Application_Start 中初始化依赖注入框架
    3. 注册依赖
    4. 使用依赖注入,或者动态解析依赖

    以我目前所做的 MVC 5 的项目为例。

    安装 Autofac 和 Autofac.Mvc5。

    然后,在 App_Start 文件夹下新建 IocConfig.cs,并在这里注册依赖和依赖解析器。

    public class IocConfig {
        public static void RegisterDependencies(HttpApplicationState ApplicationState) {
            var builder = new ContainerBuilder();
            var assembly = Assembly.GetExecutingAssembly();
            builder.RegisterControllers(assembly);
    
            builder.RegisterType<MyDbContext>();
                
            builder.RegisterAssemblyTypes(assembly)
                .Where(t => t.Name.EndsWith("Service"))
                .AsImplementedInterfaces();
    
            var container = builder.Build();
            ApplicationState["container"] = container;
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    }
    

    先不要急着阅读上方的每一句代码,之后再说。

    然后,在 Global.asax 文件里的 Application_Start() 尾部执行我们的代码。

    protected void Application_Start() {
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    
        IocConfig.RegisterDependencies(Application);
    }
    

    此时我们就已经在使用 Autofac 了,怎么使用呢?

    public class MyController : Controller {
        private MyDbContext dbContext;
        public MyController(MyDbContext dbContext) {
            this.dbContext = dbContext;
        }
    }
    

    当我们调用 MyController 下的 Action,在 ASP.NET 实例化 MyController 时 MyDbContext 将被自动实例化并作为参数传给 MyController 的构造函数,实现依赖注入。

    为什么 MyDbContext 能被注入呢?因为我们将该依赖注册到了容器里,而且注册了持有这个容器的依赖解析器。

    现在回头看看 RegisterDependencies() 的代码吧!更多关于依赖的 Register 和 Resolve 的内容欢迎查阅官方文档。

    相关文章

      网友评论

          本文标题:C# 在 ASP.NET 中使用依赖注入框架 Autofac 的

          本文链接:https://www.haomeiwen.com/subject/nmavlttx.html