/// <summary> /// /// </summary> /// <param name="key">The key of the item being resolved.</param> /// <returns></returns> public TValue this[TKey key] { get { // Cache hit? TValue value; if (ResolvedItems.TryGetValue(key, out value)) { return(value); } // Cache miss var args = new ResolvableEventArgs <TKey, TValue>(key); OnResolve(args); if (args.IsResolved) { ResolvedItems.Add(args.ResolvingKey, args.ResolvedItem); return(args.ResolvedItem); } throw new ArgumentOutOfRangeException("key", key, "Unable to resolve"); } }
private void ReportParameters_Resolve(object sender, ResolvableEventArgs <string, ReportParameter> args) { // Prompt the consumer first var reportParameterElement = ReportElement.ReportParameters.First(rp => rp.Name.SafeEqualsIgnoreCase(args.ResolvingKey)); args.ResolvedItem = LocalReportsEngineCommon.ElementToObject(reportParameterElement, this); args.IsResolved = true; }
private void DataSources_Resolve(object sender, ResolvableEventArgs <string, IResolvedDataSource> args) { // Prompt the user first var dataSourceElement = ReportElement.DataSources.First(ds => ds.Name.SafeEqualsIgnoreCase(args.ResolvingKey)); args.ResolvedItem = LocalReportsEngineCommon.ElementToObject(dataSourceElement, this); args.IsResolved = true; // We need to kick off this event, if the ds was resolved while the report was being refreshed if (IsReportRefreshing) { args.ResolvedItem.OnReportRefreshing(); } }
protected void OnResolve(ResolvableEventArgs <TKey, TValue> args) { var resolveEvent = Resolve; if (resolveEvent == null) { return; } foreach (EventHandler <ResolvableEventArgs <TKey, TValue> > invoke in resolveEvent.GetInvocationList()) { invoke(this, args); if (args.IsResolved) { break; } } }