99彩票,王朝天骄,螺旋喷嘴
重量级的orm和ioc产品离不开动态代理,作为开发人员,多数情况不用关注动态代理的内部实现机制,但是了解其一般的规律和模式还是有必要的,比如:虽然你开发期间采用了poco,因为开启了动态代理,运行期间则不是poco。本文简单描述了5种代理生成模式和1种mixin模式,最后给出一个示例。
public class animal : iplayable
{
public virtual void play()
{
console.writeline("animal.play");
}
}
public class dog : animal
{
public override void play()
{
console.writeline("dog.play");
}
}
public interface irunable
{
void run();
}
public class runability : irunable
{
public void run()
{
console.writeline("runability.run");
}
}
public class animalinterceptor : iinterceptor
{
public void intercept(iinvocation invocation)
{
console.writeline("before animalinterceptor.intercept");
if (invocation.invocationtarget != null)
{
invocation.proceed();
}
console.writeline("after animalinterceptor.intercept");
}
}
第一种:classproxy
console.writeline(animal.gettype());
console.writeline(animal.gettype().basetype);
var compositefield = animal.gettype().getfield("__target");
console.writeline(compositefield);
foreach (var interfacetype in animal.gettype().getinterfaces())
{
console.writeline(interfacetype);
}
}
第二种:classproxywithtarget
console.writeline(animal.gettype());
console.writeline(animal.gettype().basetype);
var compositefield = animal.gettype().getfield("__target");
console.writeline(compositefield);
foreach (var interfacetype in animal.gettype().getinterfaces())
{
console.writeline(interfacetype);
}
}
第三种:interfaceproxywithouttarget
console.writeline(animal.gettype());
console.writeline(animal.gettype().basetype);
var compositefield = animal.gettype().getfield("__target");
console.writeline(compositefield);
foreach (var interfacetype in animal.gettype().getinterfaces())
{
console.writeline(interfacetype);
}
}
第四种:interfaceproxywithtarget
console.writeline(animal.gettype());
console.writeline(animal.gettype().basetype);
var compositefield = animal.gettype().getfield("__target");
console.writeline(compositefield);
foreach (var interfacetype in animal.gettype().getinterfaces())
{
console.writeline(interfacetype);
}
}
第五种:interfaceproxywithtargetinterface
console.writeline(animal.gettype());
console.writeline(animal.gettype().basetype);
var compositefield = animal.gettype().getfield("__target");
console.writeline(compositefield);
foreach (var interfacetype in animal.gettype().getinterfaces())
{
console.writeline(interfacetype);
}
}
mixin模式
console.writeline(animal.gettype());
console.writeline(animal.gettype().basetype);
var compositefield = animal.gettype().getfield("__target");
console.writeline(compositefield);
foreach (var field in animal.gettype().getfields())
{
if (field.name.startswith("__mixin"))
{
console.writeline(field);
}
}
foreach (var interfacetype in animal.gettype().getinterfaces())
{
console.writeline(interfacetype);
}
}
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论