.net core .NET内核中的Unity InterfacesInterceptor
我将首先从问题开始,然后从上下文开始:.net core .NET内核中的Unity InterfacesInterceptor,.net-core,unity-container,interception,.net Core,Unity Container,Interception,我将首先从问题开始,然后从上下文开始: 是否有与.NETCore兼容的Unity.Interception版本 是否有一个与.NET内核兼容的Unity.Interception替代方案 我正在考虑使用Microsoft.Practices.Unity.InterceptionExtension.InterfaceInterceptor来短路对某些接口的调用(下面的示例代码),但建议的NuGet包Unity.Intercepton 4.0.1似乎与.NET Core不兼容 我曾尝试在Unity.
PackageTargetFallback
列表中来规避此问题:
<PackageTargetFallback>$(PackageTargetFallback);net451;dnxcore50;portable-net451+win8</PackageTargetFallback>
好像是城堡。Core的DynamicProxy是我需要的:
using Castle.DynamicProxy;
public class CustomInterceptor : IInterceptor
{
public static object CreateCustomInterceptedProxy(Type type)
{
var proxyGenerator = new ProxyGenerator();
var interceptor = new Interceptor();
var proxy = proxyGenerator.CreateInterfaceProxyWithoutTarget(type, interceptor);
return proxy;
}
}
public class CustomInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
object returnValue; // Do stuff to populate return value
invocation.ReturnValue = returnValue;
}
}
我知道这个问题大约是一个月前提出的,但我认为它可能对其他开发人员也有用(因为这对我来说是一场噩梦)。 我已经完成了Unity项目并将其移植到.NETCore2.0。您可以在此存储库下找到它: 还有这些是nuget软件包:
p.S:我唯一无法移植的部分是使用.Net远程处理的TransparentProxyInterception,它在.Net Core中完全停止使用。不幸的是,您必须使用第三方库,如:
- Unity fork:
- Dora拦截:它有一个详细的使用文档
using Castle.DynamicProxy;
public class CustomInterceptor : IInterceptor
{
public static object CreateCustomInterceptedProxy(Type type)
{
var proxyGenerator = new ProxyGenerator();
var interceptor = new Interceptor();
var proxy = proxyGenerator.CreateInterfaceProxyWithoutTarget(type, interceptor);
return proxy;
}
}
public class CustomInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
object returnValue; // Do stuff to populate return value
invocation.ReturnValue = returnValue;
}
}