如何解决Unity拦截配置-如何减少冗长?
| 要在Unity 2.0中设置侦听功能,请在您的配置中添加以下内容(取自Unity文档)... <policy name=\"addDataAccessTypes\">
<matchingRule name=\"DataLayerMatch\" type=\"NamespaceMatchingRule\">
<constructor>
<param name=\"namespaceName\" value=\"MyApp.DataAccess\" />
</constructor>
</matchingRule>
<callHandler name=\"LogHandler\" type=\"LoggingCallHandler\" />
<callHandler name=\"SecurityHandler\"
type=\"DatabaseSecurityCheckHandler\" />
</policy>
是否可以使用相同的处理类为侦听设置多个接口?
例如。像这样的东西
<constructor>
< interface to intercept 1 />
< interface to intercept 2 />
</construtor>
使用unity示例中给出的方法,如果您要拦截的接口很多,则配置文件将变得非常冗长。
解决方法
如果使用
Unity.Interception
程序集,则可以更流畅地进行属性拦截。缺点是被拦截的类确实(以某种方式)知道该方面:
一个非常快速的设置示例如下所示:
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine();
Console.WriteLine(\"Starting test...\");
var container = new UnityContainer();
container.AddNewExtension<Interception>();
container.Configure<Interception>()
.SetDefaultInterceptorFor<IGadget>(new InterfaceInterceptor());
container.RegisterType<IGadget,Gadget>();
var gadget = container.Resolve<IGadget>();
gadget.DoSomething();
}
catch (Exception ex)
{
Console.WriteLine();
Console.WriteLine(\"An error has occurred: {0}\",ex);
}
finally
{
Console.WriteLine();
Console.WriteLine(\"Test complete.\");
Console.ReadKey();
}
}
}
public class LogAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
return container.Resolve<LogHandler>();
}
}
public class LogHandler : ICallHandler
{
public int Order { get; set; }
public IMethodReturn Invoke(IMethodInvocation input,GetNextHandlerDelegate getNext)
{
Console.WriteLine(\"*** Logging the action! -{0}-\",input.MethodBase.Name);
return getNext()(input,getNext);
}
}
public interface IGadget
{
void DoSomething();
}
[Log]
public class Gadget : IGadget
{
public void DoSomething()
{
Console.WriteLine(\"\\tI did something!\");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。