傻瓜式使用AutoFac
定义一个接口:
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的更多相关文章
- webpack之傻瓜式教程
接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是却很难找到一个能让新人快 ...
- NOSDK--关于android傻瓜式的分包设想
一直以来,我总是以“够用就好”为理由,很少再维护过自己的一键打包的项目.最近接触了棱镜的sdk,感觉将apk包上传到棱镜服务器,后台来进行分包这种简单的方式很招人待见. 原理似乎不难,apk即zip压 ...
- 傻瓜式操作Nagios
傻瓜式操作Nagios 不少接触Nagios的朋友都会觉得安装配置困难,应用在企业网中所花费的时间成本很高,下面通过OSSIM来搞定它把. 为了节省资源,首先在淘汰的机器上安装一个低版本的OSSI ...
- 在线App开发平台——应用之星傻瓜式开发平台
随着智能手机及APP应用程序的普及,越来越多的企业和个人意识到APP的营销价值,出于对技术的敬畏,很多企业下意识认为开发APP是一个有难度的技术活,所以很多时候有心无力,也担心APP的后续的技术支持. ...
- 傻瓜式理解递归之php递归
写程序这么久了,有时候别人会问道一些算法比如排序啊,递归啊,总是不知道该怎么去说,今天就来整理一下,让更多的人去傻瓜式的理解递归.递归在网络上有很多定义,但有这么一句话听的最多:递归就是自己调用自己! ...
- Webpack 傻瓜式指南(一)
modules with dependencies webpack module bundler static assetss .js .js .png Webpack傻瓜式指南 n ...
- 如何使用win7自带的备份还原以及创建系统镜像------傻瓜式教程
对于经常鼓捣电脑的童鞋来说,装系统是一件极其平常的事情,不过系统装多了之后,我们会感到比较烦躁,因为每一次装系统意味着驱动的重新安装,程序的重新安装,每次这么鼓捣几次,半天时间就花在这上面了,效率是在 ...
- 图解:如何U盘装Win7系统(傻瓜式装机) + 分区步骤图解(用WIN7自带管理工具)
原地址:http://wenku.baidu.com/link?url=wV2Pfw2IM21u2KmtAcNweSZRwpXRuKAVAS29dS4aWGEpMtFdDlzZvixCgsvBxIm- ...
- ubuntu16.04下安装windows10(傻瓜式)
参考如下博文,首先利用ubuntu的16.04的启动U盘,对原有的系统的磁盘分出一个区来,并使用gparted工具格式化为nyfs格式 http://blog.csdn.net/oct11/artic ...
随机推荐
- Java并发之需要了解但不能太依赖的东东
<Java 编程思想>在并发一章中提到了Sleep休眠.优先级.后台线程,提醒读者需要了解但又不能太依赖他们.就让我们一起看看吧. 休眠Sleep import java.util.con ...
- Java 大数A+B
public class Solution { public int length = 0; public Object[] numToArrays(int num) { List<Intege ...
- JSP中列表展示,隔行变色以及S标签的使用
1.java代码 /** * 列表展示,隔行变色以及S标签的使用 * * @return */ public String list() { List<User> list = new A ...
- git 关键词扩展
用习惯了svn 的 关键词扩展.自然在git上也会寻找. 不知道啥是svn的关键词扩展? 简单列举下: 对于subversion来说,一些版本信息是不需要手动添加的,subversion提供了关键字替 ...
- 计算机程序的思维逻辑 (74) - 并发容器 - ConcurrentHashMap
本节介绍一个常用的并发容器 - ConcurrentHashMap,它是HashMap的并发版本,与HashMap相比,它有如下特点: 并发安全 直接支持一些原子复合操作 支持高并发.读操作完全并行. ...
- Git-最简单的本地项目变成版本仓库,然后把内容推送到GitHub仓库
(注:本文的前提是本地Git仓库和github仓库之间已经存在SSH key了,所以如果没有建立联系的小伙伴们请先建立联系) 具体操作: 一:把本地项目变成版本仓库 1.把本地的一个项目目录编程版本库 ...
- Selenium2 WebDriver环境搭建
1.下载Selenium Client Servers包 在Selenium官网上可以下载到最新的开源的包http://seleniumhq.org/download/,根据编写测试脚本所使用的语言下 ...
- mybatis基础学习1---(配置文件和sql语句)
1:配置文件(主要配置文件) 2:配置文件(引入) 3:sql语句解析: <mapper namespace="/"> <!-- 1 -->根据id查对象 ...
- Mac本地编辑服务器代码
windows上映射网络驱动器可以直接在本地编辑远程服务器的代码,那么在mac上怎么配置呢? 1.打开finder——前往——连接服务器——输入:smb://********(你的机器名) 2.输入服 ...
- unittest单元测试框架实现参数化
当我们在使用TestNG时,发现它有一个非常好用的参数化功能.当你的测试用例有固定的参数和断言结果时,它可以相似用例的节省用例的个数. 例子如下: import static org.testng.A ...