diff options
author | Shockah <me@shockah.pl> | 2022-02-10 16:26:43 +0100 |
---|---|---|
committer | Shockah <me@shockah.pl> | 2022-02-10 16:26:43 +0100 |
commit | a54d58d064df5654e845f9b2b4fc9db5b0189db0 (patch) | |
tree | 7dad6ce8be9b5997d981ec49f8b93b14c3ce702b /src/SMAPI/Framework | |
parent | 467375a7a37f5ed3012d1786d3149a0dddd28871 (diff) | |
download | SMAPI-a54d58d064df5654e845f9b2b4fc9db5b0189db0.tar.gz SMAPI-a54d58d064df5654e845f9b2b4fc9db5b0189db0.tar.bz2 SMAPI-a54d58d064df5654e845f9b2b4fc9db5b0189db0.zip |
add TryProxy for any objects
Diffstat (limited to 'src/SMAPI/Framework')
-rw-r--r-- | src/SMAPI/Framework/ModHelpers/ModRegistryHelper.cs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/SMAPI/Framework/ModHelpers/ModRegistryHelper.cs b/src/SMAPI/Framework/ModHelpers/ModRegistryHelper.cs index ef1ad30c..92c52b00 100644 --- a/src/SMAPI/Framework/ModHelpers/ModRegistryHelper.cs +++ b/src/SMAPI/Framework/ModHelpers/ModRegistryHelper.cs @@ -98,5 +98,31 @@ namespace StardewModdingAPI.Framework.ModHelpers return castApi; return this.ProxyFactory.CreateProxy<TInterface>(api, this.ModID, uniqueID); } + + /// <inheritdoc /> + public bool TryProxy<TInterface>(string uniqueID, object toProxy, out TInterface proxy) where TInterface : class + { + try + { + foreach (var toProxyInterface in toProxy.GetType().GetInterfaces()) + { + var unproxyBuilder = this.ProxyFactory.ObtainBuilder(typeof(TInterface), toProxyInterface, this.ModID, uniqueID); + if (unproxyBuilder.TryUnproxy(toProxy, out object targetInstance)) + { + proxy = (TInterface)targetInstance; + return true; + } + } + + var proxyBuilder = this.ProxyFactory.ObtainBuilder(toProxy.GetType(), typeof(TInterface), this.ModID, uniqueID); + proxy = (TInterface)proxyBuilder.ObtainInstance(toProxy, this.ProxyFactory); + return true; + } + catch + { + proxy = null; + return false; + } + } } } |