傻瓜式使用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 ...
随机推荐
- adt的问题An internal error has occurred. After scene creation, #init() must be called
这个问题困扰了我好久,我也尝试去百度.google无济于事啊,让我寝食难安,太难受了,我把它贴出来,希望后人不绕弯子... 解决办法: 即可,解决这一个问题,现在酣畅淋漓,挥洒自如的capy代码了
- Java对象序列化
Java 1.1增添了一种有趣的特性,名为“对象序列化”(Object Serialization).它面向那些实现了Serializable接口的对象,可将它们转换成一系列字节,并可在以后完全恢复回 ...
- 梳理一下web总的一些概念
servlet中的类适合繁复翻看文档,熟悉各个类的常用方法,看一些经典的案例代码. ServletConfig 每个项目有多个servlet,每个servlet对应一个ServletCOnfigt对象 ...
- 老司机实战Windows Server Docker:4 单节点Windows Docker服务器简单运维(下)
上篇中,我们主要介绍了使用docker-compose对Windows Docker单服务器进行远程管理,编译和部署镜像,并且设置容器的自动启动.但是,还有一些重要的问题没有解决,这些问题不解决,就完 ...
- iOS开发之KVC
1.KVC概述 KVC(Key-value coding)是一套利用字符串标识符间接访问对象属性和关系的机制.Cocoa Programming中,Core Data,Application Scri ...
- js全选与反选
HTML结构: <!doctype html><html><head><meta charset="utf-8"><title ...
- juddi学习一
一.下载juddi 地址:https://mirrors.tuna.tsinghua.edu.cn/apache/juddi/juddi/3.3.4/ 二. 解压下载文件打开目录下的 进入bin目录, ...
- iOS开发寻找最近公共view
新技能 #pragma mark --寻找最近公共view + (NSArray *)superViews:(UIView *)view{ if (view==nil) { return @[]; } ...
- 老李分享:Uber究竟是用什么开发语言? 2
Uber的任务分派系统是运行在Node上,这是一个运行在服务器端的JavaScript平台.当一个客户打开app或者网站来进行车辆预定或者调用其他的API来查看可用车辆信息的时候,大部分的这些服务都是 ...
- eclipse中配置drools6.5环境
1.去官网下载两个压缩包 2.解压两个压缩包,依次进入droolsjbpm-tools-distribution-6.5.0.Final\droolsjbpm-tools-distribution-6 ...