public ISolidProxyConfiguration <T> GetProxyConfiguration(IServiceProvider serviceProvider) { var proxyConfig = ProxyConfig; if (proxyConfig == null || proxyConfig.SolidProxyConfigurationStore.ServiceProvider != serviceProvider) { var store = (ISolidProxyConfigurationStore)serviceProvider.GetService(typeof(ISolidProxyConfigurationStore)); proxyConfig = store.GetProxyConfiguration <T>(ConfigurationId); if (ImplementationFactory != null) { proxyConfig.ConfigureAdvice <ISolidProxyInvocationImplAdviceConfig>().ImplementationFactory = ImplementationFactory; } ProxyConfig = proxyConfig; } return(proxyConfig); }
/// <summary> /// Constructs a new proxy for an interface. /// </summary> /// <param name="serviceProvider"></param> /// <param name="proxyConfiguration"></param> /// <param name="proxyGenerator"></param> protected SolidProxy(IServiceProvider serviceProvider, ISolidProxyConfiguration <T> proxyConfiguration, ISolidProxyGenerator proxyGenerator) { ServiceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); ProxyConfiguration = proxyConfiguration ?? throw new ArgumentNullException(nameof(proxyConfiguration)); Proxy = proxyGenerator.CreateInterfaceProxy(this); }
/// <summary> /// Constructs a new instance /// </summary> /// <param name="methodConfiguration"></param> /// <param name="proxyConfiguration"></param> public SolidProxyInvocationConfiguration(ISolidMethodConfigurationBuilder methodConfiguration, ISolidProxyConfiguration <TObject> proxyConfiguration) : base(SolidScopeType.Method, methodConfiguration) { MethodConfiguration = methodConfiguration ?? throw new ArgumentNullException(nameof(methodConfiguration)); ProxyConfiguration = proxyConfiguration ?? throw new ArgumentNullException(nameof(proxyConfiguration)); SetValue($"{typeof(ISolidProxyInvocationAdviceConfig).FullName}.InvocationConfiguration", this); }
/// <summary> /// Construrcts a proxy /// </summary> /// <typeparam name="T"></typeparam> /// <param name="serviceProvider"></param> /// <param name="config"></param> /// <returns></returns> public ISolidProxy <T> CreateSolidProxy <T>(IServiceProvider serviceProvider, ISolidProxyConfiguration <T> config) where T : class { return(new SolidProxyCastle <T>(serviceProvider, config, this)); }
/// <summary> /// Constructs a new instance /// </summary> /// <param name="serviceProvider"></param> /// <param name="proxyConfiguration"></param> /// <param name="proxyGenerator"></param> public SolidProxyCastle(IServiceProvider serviceProvider, ISolidProxyConfiguration <T> proxyConfiguration, ISolidProxyGenerator proxyGenerator) : base(serviceProvider, proxyConfiguration, proxyGenerator) { }