.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.

我将首先从问题开始,然后从上下文开始:

  • 是否有与.NETCore兼容的Unity.Interception版本
  • 是否有一个与.NET内核兼容的Unity.Interception替代方案
  • 我正在考虑使用Microsoft.Practices.Unity.InterceptionExtension.InterfaceInterceptor来短路对某些接口的调用(下面的示例代码),但建议的NuGet包Unity.Intercepton 4.0.1似乎与.NET Core不兼容

    我曾尝试在Unity.Interception 4.0.1中使用shoe horn,因为使用的代码片段在classic.NET中运行良好;但如前所述,我在使用.NET Core时遇到了问题:

    安装软件包:Unity软件包。拦截4.0.1与netcoreapp1.1不兼容(.NETCoreApp,版本=v1.1)。包Unity.Interception 4.0.1支持:net45(.NETFramework,Version=v4.5 )

    我试图通过将net451添加到
    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拦截:它有一个详细的使用文档

    感谢您的反馈,感谢您努力将Unity移植到.NET Core!虽然这次我们找到了一个可以接受的解决方案,但很高兴知道当我们将游戏升级到2.0时,现在有了更多的选择
    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;
        }
    }