先上配置文件:<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration, Version=2.0.414.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections> <unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> <alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration"/>
<alias alias="IoutPut" type="demo.IoutPut,demo"/>
<alias alias="outPut" type="demo.outPut,demo"/> <container> <extension type="Interception"/>
<register type="IoutPut" mapTo="outPut" >
<interceptor type="TransparentProxyInterceptor"/>
<interceptionBehavior type="demo.TestInterceptionBehavior,demo"/>
</register>
</container>
</unity>
</configuration>数据操作及操作接口:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;namespace demo
{
public class outPut: MarshalByRefObject,IoutPut
{
[MyHandler]
public void outMsg(string msg)
{
Console.WriteLine("outPut:" + msg);
Console.ReadLine();
}
} public interface IoutPut
{
[MyHandler]
void outMsg(string msg);
}
}
拦截代码:MyHander.cs这个貌似是1.2版本写法,TestInterceptionBehavior说是2.0写法public class TestInterceptionBehavior:IInterceptionBehavior
{
//private TraceSource source;
public IEnumerable<Type> GetRequiredInterfaces()
{
throw new NotImplementedException();
}
//public TestInterceptionBehavior(TraceSource source)
//{
// this.source = source;
//}
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
Console.WriteLine("方法名:{0}", input.MethodBase.Name); Console.WriteLine("参数:"); for (var i = 0; i < input.Arguments.Count; i++)
{
Console.WriteLine("{0}:{1}", input.Arguments.ParameterName(i), input.Arguments[i]);
} Console.WriteLine("开始执行"); //这之前插入方法执行前的处理
var retvalue = getNext()(input, getNext);//这里执行方法 //这之后插入方法执行后的处理
Console.WriteLine("完成"); return retvalue;
} public bool WillExecute
{
get { throw new NotImplementedException(); }
}
}
MyHandler.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;namespace demo
{
public class MyHander : ICallHandler
{
public int Order { get; set; }//ICallHandler成员,表示执行顺序 public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
Console.WriteLine("方法名:{0}", input.MethodBase.Name); Console.WriteLine("参数:"); for (var i = 0; i < input.Arguments.Count; i++)
{
Console.WriteLine("{0}:{1}", input.Arguments.ParameterName(i), input.Arguments[i]);
} Console.WriteLine("开始执行"); //这之前插入方法执行前的处理
var retvalue = getNext()(input, getNext);//这里执行方法 //这之后插入方法执行后的处理
Console.WriteLine("完成"); return retvalue;
}
} public class MyHandlerAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
//throw new NotImplementedException();
return new MyHander();
}
}
}前端调用:var container1 = new UnityContainer()
.AddNewExtension<Interception>();//声明unityContainer var map = new ExeConfigurationFileMap { ExeConfigFilename = "../../Aop.Unity.xml" }; var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); var section = (UnityConfigurationSection)config.GetSection("unity");//读取配置文件节点 if (section != null)
section.Configure(container1 as IUnityContainer); try
{
var op = container1.Resolve<IoutPut>();
op.outMsg("配置方式输出");
}
catch (ResolutionFailedException rfex)
{
LogResolutionFailed(rfex);
}在运行至var op = container1.Resolve<IoutPut>();总是异常的,异常信息:
Resolution of the dependency failed, type = "demo.IoutPut", name = "(none)".请问有遇到这个问题的朋友吗?请赐教
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration, Version=2.0.414.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections> <unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> <alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration"/>
<alias alias="IoutPut" type="demo.IoutPut,demo"/>
<alias alias="outPut" type="demo.outPut,demo"/> <container> <extension type="Interception"/>
<register type="IoutPut" mapTo="outPut" >
<interceptor type="TransparentProxyInterceptor"/>
<interceptionBehavior type="demo.TestInterceptionBehavior,demo"/>
</register>
</container>
</unity>
</configuration>数据操作及操作接口:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;namespace demo
{
public class outPut: MarshalByRefObject,IoutPut
{
[MyHandler]
public void outMsg(string msg)
{
Console.WriteLine("outPut:" + msg);
Console.ReadLine();
}
} public interface IoutPut
{
[MyHandler]
void outMsg(string msg);
}
}
拦截代码:MyHander.cs这个貌似是1.2版本写法,TestInterceptionBehavior说是2.0写法public class TestInterceptionBehavior:IInterceptionBehavior
{
//private TraceSource source;
public IEnumerable<Type> GetRequiredInterfaces()
{
throw new NotImplementedException();
}
//public TestInterceptionBehavior(TraceSource source)
//{
// this.source = source;
//}
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
Console.WriteLine("方法名:{0}", input.MethodBase.Name); Console.WriteLine("参数:"); for (var i = 0; i < input.Arguments.Count; i++)
{
Console.WriteLine("{0}:{1}", input.Arguments.ParameterName(i), input.Arguments[i]);
} Console.WriteLine("开始执行"); //这之前插入方法执行前的处理
var retvalue = getNext()(input, getNext);//这里执行方法 //这之后插入方法执行后的处理
Console.WriteLine("完成"); return retvalue;
} public bool WillExecute
{
get { throw new NotImplementedException(); }
}
}
MyHandler.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;namespace demo
{
public class MyHander : ICallHandler
{
public int Order { get; set; }//ICallHandler成员,表示执行顺序 public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
Console.WriteLine("方法名:{0}", input.MethodBase.Name); Console.WriteLine("参数:"); for (var i = 0; i < input.Arguments.Count; i++)
{
Console.WriteLine("{0}:{1}", input.Arguments.ParameterName(i), input.Arguments[i]);
} Console.WriteLine("开始执行"); //这之前插入方法执行前的处理
var retvalue = getNext()(input, getNext);//这里执行方法 //这之后插入方法执行后的处理
Console.WriteLine("完成"); return retvalue;
}
} public class MyHandlerAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
//throw new NotImplementedException();
return new MyHander();
}
}
}前端调用:var container1 = new UnityContainer()
.AddNewExtension<Interception>();//声明unityContainer var map = new ExeConfigurationFileMap { ExeConfigFilename = "../../Aop.Unity.xml" }; var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); var section = (UnityConfigurationSection)config.GetSection("unity");//读取配置文件节点 if (section != null)
section.Configure(container1 as IUnityContainer); try
{
var op = container1.Resolve<IoutPut>();
op.outMsg("配置方式输出");
}
catch (ResolutionFailedException rfex)
{
LogResolutionFailed(rfex);
}在运行至var op = container1.Resolve<IoutPut>();总是异常的,异常信息:
Resolution of the dependency failed, type = "demo.IoutPut", name = "(none)".请问有遇到这个问题的朋友吗?请赐教
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货