傻瓜式使用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 ...
随机推荐
- Ubuntu16.04下搭建LAMP环境
前期准备sudo apt-get update # 获取最新资源包sudo apt-get upgrade # 本机软件全部更新sudo apt-get d ...
- 1059: [ZJOI2007]矩阵游戏
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2154 Solved: 1053[Submit][Stat ...
- otool介绍(转http://www.mc2lab.com/?p=68)
1. Otool简介 Otool可以提取并显示ios下目标文件的相关信息,包括头部,加载命令,各个段,共享库,动态库等等.它拥有大量的命令选项,是一个功能强大的分析工具,当然还可以做反汇编的工具使用. ...
- Omi v1.0.2发布 - 正式支持传递javascript表达式
原文地址:https://github.com/AlloyTeam/omi/ 写在前面 Omi框架可以通过在组件上声明 data-* 把属性传递给子节点. Omi从设计之初,就是往标准的DOM标签的标 ...
- sublime插件emmet的配置、使用及快捷键Ctrl+E修改成Tab键操作
一.emmet在sublime中的配置与使用: 1.点击sublime text 3的图标,打开编辑器: 2.按键“ctrl+shift+p”,或者单击菜单->工具->命令面板: 3.打开 ...
- tesseract ocr文字识别
一.环境搭建 (基于VS2010) 1.下载安装 tesseract-ocr-setup-3.02.02.exe 安装包 ,安装时候最好是在FQ的情况下安装.(安装一点要勾选 Tesseract de ...
- 在ExpressJS中设置二级域名跨域共享Cookie
问题:我使用expressjs和mongostore来管理session.下面是expressjs中的设置. app.configure(function(){ app.use(express.ses ...
- dev机上数据库中批量生成table
我的低效方法: 通过本地php脚本进行create: <?php //0-63 header("Content-type:text/html;charset=utf-8"); ...
- Jmeter-测试计划元件
打开Jmeter页面,默认显示测试计划和工作台: 1.测试计划: 用来描述一个性能测试,包含与本次性能测试所有相关的功能.也就说性能测试的所有内容是于基于一个计划的. 右键单击"测试计划&q ...
- java封装的方法
java封装是由Java是面向对象程序设计语言的性质决定的,面向对象程序设计语言的三大特性之一就是封装.封装其实就是包装的意思,从专业的角度来看,就是把对象的所有组成部分组合在一起,保护私有属性. 如 ...