项目包引用: 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#项目中实现注入的更多相关文章

  1. 关于springboot项目中自动注入,但是用的时候值为空的BUG

    最近想做一些web项目来填充下业余时间,首先想到了使用springboot框架,毕竟方便 快捷 首先:去这里 http://start.spring.io/ 直接构建了一个springboot初始化的 ...

  2. 项目中Spring注入报错小结

    之前在做单元测试时采用注解方式进行service对象的注入,但运行测试用例时对象要注入的service对象总是空的,检查下spring配置文件,我要配置的bean类xml文件已经包含到spring要加 ...

  3. 采用EntLib5.0(Unity+Interception+Caching)实现项目中可用的Caching机制

    看了园子里很多介绍Caching的文章,多数都只介绍基本机制,对于Cache更新和依赖部分,更是只简单的实现ICacheItemRefreshAction接口,这在实际项目中是远远不够的.实际项目中, ...

  4. 在Unity项目中使用Git

    (搬运自我在SegmentFault的博客) 本文参考了Unity官网的Mastering Unity Project Folder Structure - Version Control Syste ...

  5. 关于Unity项目中创建项目遇到的一些问题

    1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: ...

  6. Unity项目中的资源管理

    这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...

  7. 关于 Unity 项目中的 Mono 堆内存泄露

    关于 Unity 项目中的 Mono 堆内存泄露 题记:这是补一篇应该在将近一年前就应该写的记录,今天终于补上. 内存泄露是一个老话题了,之前我专门写过一篇 排查 Lua 虚拟机内存泄露 的文章,并且 ...

  8. WPF Step By Step 系列-Prism框架在项目中使用

    WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...

  9. 在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)

    最近公司的大厅要重做,我协助主程一起制作新大厅和新框架,前面制作的编辑器也派上了用场.等全部功能做完后我会再写一个复盘,这两天主程在忙于写热更新的功能,所以把接入分享SDK功能的任务交给了我,Shar ...

随机推荐

  1. C#使用LitJson解析JSON(转)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - Decembe ...

  2. 【HELLO WAKA】WAKA iOS客户端 之二 架构设计与实现篇

    上一篇主要做了MAKA APP的需求分析,功能结构分解,架构分析,API分析,API数据结构分析. 这篇主要讲如何从零做iOS应用架构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 ...

  3. 2.安装中国版本的firefox

    Linux刚安装好的时候,默认是火狐浏览器并且版本比较低,而且预装的是国际版 跟中国版无法同步,因为我windows上是中国版 首先去火狐主页,中文是http://www.firefox.com.cn ...

  4. Mr. Kitayuta vs. Bamboos

    Mr. Kitayuta vs. Bamboos 题目链接:http://codeforces.com/problemset/problem/505/E 参考:http://blog.csdn.net ...

  5. javascript基础(五)函数

    原文http://pij.robinqu.me/ 通过call和apply间接调用函数(改变this) call 和 apply带有多个参数,call和apply把当前函数的this指向第一个参数给定 ...

  6. hdu_4742_Pinball Game 3D(cdq分治+树状数组)

    题目链接:hdu_4742_Pinball Game 3D 题意: 给你n个点,让你求三维的LIS,并且求出有多少种组合能达到LIS. 题解: 求三维的LIS,典型的三维偏序问题,x排序,解决一维,c ...

  7. 如何在Excel中少犯二(I)

    作者:何明科链接:https://zhuanlan.zhihu.com/p/23472480来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 收到不少建议,要求开知乎Li ...

  8. jquery-ui-multiselect 的使用

    @model Gd.NetSign.Controllers.DTO.WsaleFundManageDTO @{ ViewBag.Title = "ShowDUYUN"; //Lay ...

  9. ecos 问题答疑(转)

    1.为什么我购买的是源码版,但是我的base/ego.php(或者base/ego/目录下文件)却是加密的?  答:ego 源码商业授权文件仅用于和商派软件签订源码协议的商业用户按照甲乙的源码保护约定 ...

  10. 解决curl中errno为51和60的错误

    今天使用curl调用https接口的时候,发现接收不了数据 然后打印出curl_errno和curl_error发现是60错误,而生产环境是51错误 查了相关资料 加上两个参数就可以了 curl_se ...