Unity 的ICallHander在C#项目中实现注入
项目包引用: Install-Package Unity.Interception
创建项目的接口和其实类:
public interface ICalculator
{
double CalculateAdd(double a, double b);
double CalculateMultiply(double a, double b);
double CalculateMinus(double a, double b);
double CalculateDevide(double a, double b);
} [LoggerIndicate]
public class Calculator:ICalculator
{
public double CalculateAdd(double a, double b) { return a + b; }
public double CalculateMultiply(double a, double b) { return a * b; }
public double CalculateMinus(double a, double b) { return a - b; }
public double CalculateDevide(double a, double b) { return a / b; }
}
创建一个方法注入的类,这个类必须实现ICallHander接口
public class LoggerHandler : ICallHandler
{
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
var traceId = System.Guid.NewGuid().ToString();
TimeRecorder tr = new TimeRecorder();
var result = getNext()(input, getNext);
tr.Dispose();
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Call {0} (", input.MethodBase.Name);
foreach (var parameter in input.Arguments)
{
sb.Append(parameter.ToString()).Append(",");
}
sb.Append(")");
sb.AppendFormat(" takes {0}ms", tr.ElapsedMilliseconds);
Console.WriteLine(sb.ToString());
return result;
} public int Order { get; set; } //用来控制执行顺序
}
创建属性来标是否需要注入
public class LoggerIndicateAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container) {
return new LoggerHandler();
}
}
最后测试
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.AddNewExtension<Interception>();
container.RegisterType<ICalculator, Calculator>()
.Configure<Interception>()
.SetInterceptorFor<ICalculator>(new InterfaceInterceptor()); // Resolve
ICalculator calc = container.Resolve<ICalculator>(); var d = calc.CalculateAdd(1, 2);
d = calc.CalculateMinus(23, 3);
Console.Read();
}
Unity 的ICallHander在C#项目中实现注入的更多相关文章
- 关于springboot项目中自动注入,但是用的时候值为空的BUG
最近想做一些web项目来填充下业余时间,首先想到了使用springboot框架,毕竟方便 快捷 首先:去这里 http://start.spring.io/ 直接构建了一个springboot初始化的 ...
- 项目中Spring注入报错小结
之前在做单元测试时采用注解方式进行service对象的注入,但运行测试用例时对象要注入的service对象总是空的,检查下spring配置文件,我要配置的bean类xml文件已经包含到spring要加 ...
- 采用EntLib5.0(Unity+Interception+Caching)实现项目中可用的Caching机制
看了园子里很多介绍Caching的文章,多数都只介绍基本机制,对于Cache更新和依赖部分,更是只简单的实现ICacheItemRefreshAction接口,这在实际项目中是远远不够的.实际项目中, ...
- 在Unity项目中使用Git
(搬运自我在SegmentFault的博客) 本文参考了Unity官网的Mastering Unity Project Folder Structure - Version Control Syste ...
- 关于Unity项目中创建项目遇到的一些问题
1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: ...
- Unity项目中的资源管理
这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...
- 关于 Unity 项目中的 Mono 堆内存泄露
关于 Unity 项目中的 Mono 堆内存泄露 题记:这是补一篇应该在将近一年前就应该写的记录,今天终于补上. 内存泄露是一个老话题了,之前我专门写过一篇 排查 Lua 虚拟机内存泄露 的文章,并且 ...
- WPF Step By Step 系列-Prism框架在项目中使用
WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...
- 在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)
最近公司的大厅要重做,我协助主程一起制作新大厅和新框架,前面制作的编辑器也派上了用场.等全部功能做完后我会再写一个复盘,这两天主程在忙于写热更新的功能,所以把接入分享SDK功能的任务交给了我,Shar ...
随机推荐
- 强制改变IE中的文本模式
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
- 第三节,入门知识和windows系统安装python环境
1.使用Linux的好处(稳定)不容易死机,可以长达几年不间断运行(安全)相对windows系统更安全,相对更不容受到各种攻击(开源)免费使用2.安装好虚拟机VMware软件,和Linux系统,以及X ...
- 设计模式 装饰模式(Decorator)
设计模式 装饰模式(Decorator) @author ixenos 装饰模式是什么 1.装饰模式以对客户端透明的方式对象的功能,是继承关系的一个替代方案,但装饰模式可以在不创造更多子类的情况下,对 ...
- Union、Union All、Except、InterSect的区别
UNION: 将多个「结果集 (result set)」的「行 (row)」合并,作为单个结果集返回,并移除重复的行.若有重复的行,只留下一个. UNION ALL: 将多个「结果集 (result ...
- Spring自动扫描
需要在Springde 配置文件中加入 <context:component-scan base-package="com.annoation"> base-packa ...
- 【转】Spring事务超时时间可能存在的错误认识
1.先看代码 1.1.spring-config.xml <bean id="dataSource" class="org.springframework.jdbc ...
- Andorid第三方库
博客: http://blog.csdn.net/codywangziham01/article/details/11818559#t8 RoboGuice: http://www.importnew ...
- hdu 1028 Ignatius and the Princess III(母函数入门+模板)
Description "Well, it seems the first problem is too easy. I will let you know how foolish you ...
- 配置mac自带的Apache服务器
第一步: 484 cd /etc/apache2 备份httpd.conf文件,以防万一 486 sudo cp httpd.conf httpd.conf.bak 如果操作错误,可以通过 491 ...
- Raft详解-启动后运行期间代码
Raft启动后运行期间主要执行两个函数:1.状态监测和转化 func (rf *Raft) Loop() { // Set out as a follower TimeOutConst := 0 fo ...