public InterfaceT Resolve <InterfaceT>(string alias, string resolverName = "") { int resultError; InterfaceT result = default; IResolvable resolvable = ServersHolder.GetResolvable(ref alias, out resultError); if (resultError == 0) { IResolverHandler resolverHandler = resolvable.GetResolver <InterfaceT>(Resolvable.RESOLVER_DEF, out _); resolverHandler.InvokeResolver(); result = (InterfaceT)resolverHandler.ResolverParam; resolverHandler = resolvable.GetResolver <InterfaceT>(Resolvable.RESOLVER_CRT, out _); resolverHandler.SetParam(ref result); resolverHandler.InvokeResolver(); result = (InterfaceT)resolverHandler.ResolverParam; if ((result != default) && !string.IsNullOrEmpty(resolverName)) { resolverHandler = resolvable.GetResolver <InterfaceT>(resolverName, out _); resolverHandler.SetParam(ref result); resolverHandler.InvokeResolver(); if (resolverHandler.OnlyOnce) { resolvable.RemoveResolver <InterfaceT>(resolverName, out _); } } } return(result); }
public IResolverHandler GetResolver <InterfaceT>(string resolverName, out int statu) { statu = 0; IResolverHandler handler = default; bool hasRef = mResolverIDMapper.ContainsKey(ref resolverName, out int id); if (hasRef) { handler = mResolvers[id]; } else { statu = 1; } return(handler); }
public void RemoveResolver <InterfaceT>(string resolverName, out int statu) { statu = 0; bool hasRef = mResolverIDMapper.ContainsKey(ref resolverName, out int id); if (hasRef) { IResolverHandler handler = mResolvers.Remove(id); handler.Dispose(); mResolverIDMapper.Remove(resolverName, out statu); } else { statu = 1; } }