定义一个接口:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace AutoFacTest
{
public interface IAddressService
{
string GetAddress(int contactNumber);
}
}

实现类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace AutoFacTest
{
public class AddressService : IAddressService
{
public string GetAddress(int contactNumber)
{
string result = string.Empty; if (contactNumber == )
result = "上海浦东"; return result;
}
}
}

先来定义一个容器:

 using Autofac;
using Autofac.Core;
using Autofac.Integration.Mvc;
using Autofac.Extras.AggregateService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace AutoFacTest.Common
{
public class ObjectContainer
{
public static IContainer Container
{
get
{
return _container;
}
} private static IContainer _container; private ObjectContainer()
{
} public static void Initialize(Action<ContainerBuilder> action)
{
var builder = new ContainerBuilder(); if (action != null)
{
action(builder);
} _container = builder.Build();
} public static bool IsRegistered<TService>()
{
ThrowIfNotInitialized();
return _container.IsRegistered<TService>();
} public static bool IsRegistered(Type serviceType)
{
ThrowIfNotInitialized();
return _container.IsRegistered(serviceType);
} public static TService Resolve<TService>(params Parameter[] parameters)
{
ThrowIfNotInitialized();
return _container.Resolve<TService>(parameters);
} public static object Resolve(Type serviceType, params Parameter[] parameters)
{
ThrowIfNotInitialized();
return _container.Resolve(serviceType, parameters);
} public static TService ResolveNamed<TService>(string serviceName, params Parameter[] parameters)
{
ThrowIfNotInitialized();
return _container.ResolveNamed<TService>(serviceName, parameters);
} public static object ResolveNamed(string serviceName, Type serviceType, params Parameter[] parameters)
{
ThrowIfNotInitialized();
return _container.ResolveNamed(serviceName, serviceType, parameters);
} public static bool TryResolve<TService>(out TService service)
{
ThrowIfNotInitialized();
return _container.TryResolve<TService>(out service);
} public static bool TryResolve(Type serviceType, out object service)
{
ThrowIfNotInitialized();
return _container.TryResolve(serviceType, out service);
} private static void ThrowIfNotInitialized()
{
if (_container == null)
throw new InvalidOperationException("Container should be initialized before using it.");
}
}
}

Global中注册AddressService和IAddressService的依赖关系,自动将实现类AddressService注入到Ioc容器中。

using AutoFacTest.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;
using Autofac;
using Autofac.Integration.Mvc;
using Autofac.Extras.AggregateService; namespace AutoFacTest
{
public class Global : HttpApplication
{
private System.ComponentModel.IContainer components = null;
protected void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
RegisterDependencies();
} private void RegisterDependencies()
{
ObjectContainer.Initialize(builder =>
{
builder.RegisterType<AddressService>().As<IAddressService>
().InstancePerDependency();
});
}

}
}

使用:

  IAddressService svc = Common.ObjectContainer.Resolve<IAddressService>();
string address = svc.GetAddress();

再也不用手动new那么多 object。再也不用手写factory,AutoFac就是这么方便。

傻瓜式使用AutoFac的更多相关文章

  1. webpack之傻瓜式教程

    接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是却很难找到一个能让新人快 ...

  2. NOSDK--关于android傻瓜式的分包设想

    一直以来,我总是以“够用就好”为理由,很少再维护过自己的一键打包的项目.最近接触了棱镜的sdk,感觉将apk包上传到棱镜服务器,后台来进行分包这种简单的方式很招人待见. 原理似乎不难,apk即zip压 ...

  3. 傻瓜式操作Nagios

    傻瓜式操作Nagios   不少接触Nagios的朋友都会觉得安装配置困难,应用在企业网中所花费的时间成本很高,下面通过OSSIM来搞定它把. 为了节省资源,首先在淘汰的机器上安装一个低版本的OSSI ...

  4. 在线App开发平台——应用之星傻瓜式开发平台

    随着智能手机及APP应用程序的普及,越来越多的企业和个人意识到APP的营销价值,出于对技术的敬畏,很多企业下意识认为开发APP是一个有难度的技术活,所以很多时候有心无力,也担心APP的后续的技术支持. ...

  5. 傻瓜式理解递归之php递归

    写程序这么久了,有时候别人会问道一些算法比如排序啊,递归啊,总是不知道该怎么去说,今天就来整理一下,让更多的人去傻瓜式的理解递归.递归在网络上有很多定义,但有这么一句话听的最多:递归就是自己调用自己! ...

  6. Webpack 傻瓜式指南(一)

    modules with dependencies   webpack   module bundler   static  assetss   .js .js .png Webpack傻瓜式指南 n ...

  7. 如何使用win7自带的备份还原以及创建系统镜像------傻瓜式教程

    对于经常鼓捣电脑的童鞋来说,装系统是一件极其平常的事情,不过系统装多了之后,我们会感到比较烦躁,因为每一次装系统意味着驱动的重新安装,程序的重新安装,每次这么鼓捣几次,半天时间就花在这上面了,效率是在 ...

  8. 图解:如何U盘装Win7系统(傻瓜式装机) + 分区步骤图解(用WIN7自带管理工具)

    原地址:http://wenku.baidu.com/link?url=wV2Pfw2IM21u2KmtAcNweSZRwpXRuKAVAS29dS4aWGEpMtFdDlzZvixCgsvBxIm- ...

  9. ubuntu16.04下安装windows10(傻瓜式)

    参考如下博文,首先利用ubuntu的16.04的启动U盘,对原有的系统的磁盘分出一个区来,并使用gparted工具格式化为nyfs格式 http://blog.csdn.net/oct11/artic ...

随机推荐

  1. jquery考试纠错笔记.

    1. 获取元素范围大小顺序依次为: $(#one).siblings("div")>$("#one~div")>$("#one +div& ...

  2. “使用多target来构建大量相似App”,唐巧大神理论验证(附工程代码地址)

    无意间看到巧神的文章时,感觉非常兴奋,此文章正好解决了公司目前项目的痛点. 读到以下关键一段时,不甚明了,故自己做了实验分享给有缘人. "我们的每个课程的资源文件都具有相同的文件名,例如首页 ...

  3. lab1-Junit&Eclemma

    Software Testing, Lab 1 March 10. 2016, by 赵国佺(3014218108) 一.     environment setup Firstly, I downl ...

  4. C++基础——C面向过程与C++面向对象编程01_圆面积求解

    #include "iostream";//包含C++的头文件using namespace std;//使用命名空间std标准的命名空间(在这个命名空间中定义了很多标准定义)vo ...

  5. 梳理一下web总的一些概念

    servlet中的类适合繁复翻看文档,熟悉各个类的常用方法,看一些经典的案例代码. ServletConfig 每个项目有多个servlet,每个servlet对应一个ServletCOnfigt对象 ...

  6. 2017-3-22 HTML 表单 、框架

    表单:<form action="" method="get/post" ></form> 表单元素:12个 1.文本类 文本框:< ...

  7. python3.6 简单爬虫

    # coding='UTF-8' from bs4 import BeautifulSoup # 引入beautifulsoup 解析html事半功倍 import re import urllib ...

  8. iOS开发之如何修改导航栏的内容

    导航栏的内容由栈顶控制器的navigationItem属性决定. UINavigationItem有以下属性影响着导航栏的内容(通常在子控制器中viewDidLoad方法中调用这些方法): 左上角的返 ...

  9. Windows 10 Creaters Update 画中画模式和窗口高斯模糊

    在Windows 10 Creaters Update中,可以给窗口设置高斯模糊了,只要几行代码! <Grid Loaded="Grid_Loaded"> <Gr ...

  10. Sublime Text 3下载-汉化-插件配置

    Sublime Text 3下载 不用说是上官方下载地址:http://www.sublimetext.com/3 Sublime Text 3 免费使用方法 Sublime Text 2的时候还有一 ...