You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

System.Diagnostics.DiagnosticSource.xml 28 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. <?xml version="1.0"?>
  2. <doc>
  3. <assembly>
  4. <name>System.Diagnostics.DiagnosticSource</name>
  5. </assembly>
  6. <members>
  7. <member name="T:System.Diagnostics.DiagnosticSource">
  8. <summary>
  9. This is the basic API to 'hook' parts of the framework. It is like an EventSource
  10. (which can also write object), but is intended to log complex objects that can't be serialized.
  11. Please See the DiagnosticSource Users Guide
  12. https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/DiagnosticSourceUsersGuide.md
  13. for instructions on its use.
  14. </summary>
  15. </member>
  16. <member name="M:System.Diagnostics.DiagnosticSource.Write(System.String,System.Object)">
  17. <summary>
  18. Write is a generic way of logging complex payloads. Each notification
  19. is given a name, which identifies it as well as a object (typically an anonymous type)
  20. that gives the information to pass to the notification, which is arbitrary.
  21. The name should be short (so don't use fully qualified names unless you have to
  22. to avoid ambiguity), but you want the name to be globally unique. Typically your componentName.eventName
  23. where componentName and eventName are strings less than 10 characters are a good compromise.
  24. notification names should NOT have '.' in them because component names have dots and for them both
  25. to have dots would lead to ambiguity. The suggestion is to use _ instead. It is assumed
  26. that listeners will use string prefixing to filter groups, thus having hierarchy in component
  27. names is good.
  28. </summary>
  29. <param name="name">The name of the event being written.</param>
  30. <param name="value">An object that represent the value being passed as a payload for the event.
  31. This is often a anonymous type which contains several sub-values.</param>
  32. </member>
  33. <member name="M:System.Diagnostics.DiagnosticSource.IsEnabled(System.String)">
  34. <summary>
  35. Optional: if there is expensive setup for the notification, you can call IsEnabled
  36. before doing this setup. Consumers should not be assuming that they only get notifications
  37. for which IsEnabled is true however, it is optional for producers to call this API.
  38. The name should be the same as what is passed to Write.
  39. </summary>
  40. <param name="name">The name of the event being written.</param>
  41. </member>
  42. <member name="T:System.Diagnostics.DiagnosticListener">
  43. <summary>
  44. A DiagnosticListener is something that forwards on events written with DiagnosticSource.
  45. It is an IObservable (has Subscribe method), and it also has a Subscribe overload that
  46. lets you specify a 'IsEnabled' predicate that users of DiagnosticSource will use for
  47. 'quick checks'.
  48. The item in the stream is a KeyValuePair[string, object] where the string is the name
  49. of the diagnostic item and the object is the payload (typically an anonymous type).
  50. There may be many DiagnosticListeners in the system, but we encourage the use of
  51. The DiagnosticSource.DefaultSource which goes to the DiagnosticListener.DefaultListener.
  52. If you need to see 'everything' you can subscribe to the 'AllListeners' event that
  53. will fire for every live DiagnosticListener in the appdomain (past or present).
  54. Please See the DiagnosticSource Users Guide
  55. https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/DiagnosticSourceUsersGuide.md
  56. for instructions on its use.
  57. </summary>
  58. </member>
  59. <member name="P:System.Diagnostics.DiagnosticListener.AllListeners">
  60. <summary>
  61. When you subscribe to this you get callbacks for all NotificationListeners in the appdomain
  62. as well as those that occurred in the past, and all future Listeners created in the future.
  63. </summary>
  64. </member>
  65. <member name="M:System.Diagnostics.DiagnosticListener.Subscribe(System.IObserver{System.Collections.Generic.KeyValuePair{System.String,System.Object}},System.Predicate{System.String})">
  66. <summary>
  67. Add a subscriber (Observer). If 'IsEnabled' == null (or not present), then the Source's IsEnabled
  68. will always return true.
  69. </summary>
  70. </member>
  71. <member name="M:System.Diagnostics.DiagnosticListener.Subscribe(System.IObserver{System.Collections.Generic.KeyValuePair{System.String,System.Object}})">
  72. <summary>
  73. Same as other Subscribe overload where the predicate is assumed to always return true.
  74. </summary>
  75. </member>
  76. <member name="M:System.Diagnostics.DiagnosticListener.#ctor(System.String)">
  77. <summary>
  78. Make a new DiagnosticListener, it is a NotificationSource, which means the returned result can be used to
  79. log notifications, but it also has a Subscribe method so notifications can be forwarded
  80. arbitrarily. Thus its job is to forward things from the producer to all the listeners
  81. (multi-casting). Generally you should not be making your own DiagnosticListener but use the
  82. DiagnosticListener.Default, so that notifications are as 'public' as possible.
  83. </summary>
  84. </member>
  85. <member name="M:System.Diagnostics.DiagnosticListener.Dispose">
  86. <summary>
  87. Clean up the NotificationListeners. Notification listeners do NOT DIE ON THEIR OWN
  88. because they are in a global list (for discoverability). You must dispose them explicitly.
  89. Note that we do not do the Dispose(bool) pattern because we frankly don't want to support
  90. subclasses that have non-managed state.
  91. </summary>
  92. </member>
  93. <member name="P:System.Diagnostics.DiagnosticListener.Name">
  94. <summary>
  95. When a DiagnosticListener is created it is given a name. Return this.
  96. </summary>
  97. </member>
  98. <member name="M:System.Diagnostics.DiagnosticListener.ToString">
  99. <summary>
  100. Return the name for the ToString() to aid in debugging.
  101. </summary>
  102. <returns></returns>
  103. </member>
  104. <member name="M:System.Diagnostics.DiagnosticListener.IsEnabled(System.String)">
  105. <summary>
  106. Override abstract method
  107. </summary>
  108. </member>
  109. <member name="M:System.Diagnostics.DiagnosticListener.Write(System.String,System.Object)">
  110. <summary>
  111. Override abstract method
  112. </summary>
  113. </member>
  114. <member name="T:System.Diagnostics.DiagnosticListener.AllListenerObservable">
  115. <summary>
  116. Logically AllListenerObservable has a very simple task. It has a linked list of subscribers that want
  117. a callback when a new listener gets created. When a new DiagnosticListener gets created it should call
  118. OnNewDiagnosticListener so that AllListenerObservable can forward it on to all the subscribers.
  119. </summary>
  120. </member>
  121. <member name="M:System.Diagnostics.DiagnosticListener.AllListenerObservable.OnNewDiagnosticListener(System.Diagnostics.DiagnosticListener)">
  122. <summary>
  123. Called when a new DiagnosticListener gets created to tell anyone who subscribed that this happened.
  124. </summary>
  125. <param name="diagnosticListener"></param>
  126. </member>
  127. <member name="M:System.Diagnostics.DiagnosticListener.AllListenerObservable.Remove(System.Diagnostics.DiagnosticListener.AllListenerObservable.AllListenerSubscription)">
  128. <summary>
  129. Remove 'subscription from the list of subscriptions that the observable has. Called when
  130. subscriptions are disposed. Returns true if the subscription was removed.
  131. </summary>
  132. </member>
  133. <member name="T:System.Diagnostics.DiagnosticListener.AllListenerObservable.AllListenerSubscription">
  134. <summary>
  135. One node in the linked list of subscriptions that AllListenerObservable keeps. It is
  136. IDisposable, and when that is called it removes itself from the list.
  137. </summary>
  138. </member>
  139. <member name="T:System.Diagnostics.DiagnosticSourceEventSource">
  140. <summary>
  141. DiagnosticSourceEventSource serves two purposes
  142. 1) It allows debuggers to inject code via Function evaluation. This is the purpose of the
  143. BreakPointWithDebuggerFuncEval function in the 'OnEventCommand' method. Basically even in
  144. release code, debuggers can place a breakpoint in this method and then trigger the
  145. DiagnosticSourceEventSource via ETW. Thus from outside the process you can get a hook that
  146. is guaranteed to happen BEFORE any DiangosticSource events (if the process is just starting)
  147. or as soon as possible afterward if it is on attach.
  148. 2) It provides a 'bridge' that allows DiagnosticSource messages to be forwarded to EventListers
  149. or ETW. You can do this by enabling the Microsoft-Diagnostics-DiagnosticSource with the
  150. 'Events' keyword (for diagnostics purposes, you should also turn on the 'Messages' keyword.
  151. This EventSource defines a EventSource argument called 'FilterAndPayloadSpecs' that defines
  152. what DiagnsoticSources to enable and what parts of the payload to serialize into the key-value
  153. list that will be forwarded to the EventSource. If it is empty, all serializable parts of
  154. every DiagnosticSource event will be forwarded (this is NOT recommended for monitoring but
  155. can be useful for discovery).
  156. The FilterAndPayloadSpecs is one long string with the following structures
  157. * It is a newline separated list of FILTER_AND_PAYLOAD_SPEC
  158. * a FILTER_AND_PAYLOAD_SPEC can be
  159. * EVENT_NAME : TRANSFORM_SPECS
  160. * EMPTY - turns on all sources with implicit payload elements.
  161. * an EVENTNAME can be
  162. * DIAGNOSTIC_SOURCE_NAME / DIAGNOSTC_EVENT_NAME @ EVENT_SOURCE_EVENTNAME - give the name as well as the EventSource event to log it under.
  163. * DIAGNOSTIC_SOURCE_NAME / DIAGNOSTC_EVENT_NAME
  164. * DIAGNOSTIC_SOURCE_NAME - which wildcards every event in the Diagnostic source or
  165. * EMPTY - which turns on all sources
  166. * TRANSFORM_SPEC is a semicolon separated list of TRANSFORM_SPEC, which can be
  167. * - TRANSFORM_SPEC - the '-' indicates that implicit payload elements should be suppressed
  168. * VARIABLE_NAME = PROPERTY_SPEC - indicates that a payload element 'VARIABLE_NAME' is created from PROPERTY_SPEC
  169. * PROPERTY_SPEC - This is a shortcut where VARIABLE_NAME is the LAST property name
  170. * a PROPERTY_SPEC is basically a list of names separated by '.'
  171. * PROPERTY_NAME - fetches a property from the DiagnosticSource payload object
  172. * PROPERTY_NAME . PROPERTY NAME - fetches a sub-property of the object.
  173. Example1:
  174. "BridgeTestSource1/TestEvent1:cls_Point_X=cls.Point.X;cls_Point_Y=cls.Point.Y\r\n" +
  175. "BridgeTestSource2/TestEvent2:-cls.Url"
  176. This indicates that two events should be turned on, The 'TestEvent1' event in BridgeTestSource1 and the
  177. 'TestEvent2' in BridgeTestSource2. In the first case, because the transform did not begin with a -
  178. any primitive type/string of 'TestEvent1's payload will be serialized into the output. In addition if
  179. there a property of the payload object called 'cls' which in turn has a property 'Point' which in turn
  180. has a property 'X' then that data is also put in the output with the name cls_Point_X. Similarly
  181. if cls.Point.Y exists, then that value will also be put in the output with the name cls_Point_Y.
  182. For the 'BridgeTestSource2/TestEvent2' event, because the - was specified NO implicit fields will be
  183. generated, but if there is a property call 'cls' which has a property 'Url' then that will be placed in
  184. the output with the name 'Url' (since that was the last property name used and no Variable= clause was
  185. specified.
  186. Example:
  187. "BridgeTestSource1\r\n" +
  188. "BridgeTestSource2"
  189. This will enable all events for the BridgeTestSource1 and BridgeTestSource2 sources. Any string/primitive
  190. properties of any of the events will be serialized into the output.
  191. Example:
  192. ""
  193. This turns on all DiagnosticSources Any string/primitive properties of any of the events will be serialized
  194. into the output. This is not likely to be a good idea as it will be very verbose, but is useful to quickly
  195. discover what is available.
  196. * How data is logged in the EventSource
  197. By default all data from Diagnostic sources is logged to the the DiagnosticEventSouce event called 'Event'
  198. which has three fields
  199. string SourceName,
  200. string EventName,
  201. IEnumerable[KeyValuePair[string, string]] Argument
  202. However to support start-stop activity tracking, there are six other events that can be used
  203. Activity1Start
  204. Activity1Stop
  205. Activity2Start
  206. Activity2Stop
  207. RecursiveActivity1Start
  208. RecursiveActivity1Stop
  209. By using the SourceName/EventName@EventSourceName syntax, you can force particular DiagnosticSource events to
  210. be logged with one of these EventSource events. This is useful because the events above have start-stop semantics
  211. which means that they create activity IDs that are attached to all logging messages between the start and
  212. the stop (see https://blogs.msdn.microsoft.com/vancem/2015/09/14/exploring-eventsource-activity-correlation-and-causation-features/)
  213. For example the specification
  214. "MyDiagnosticSource/RequestStart@Activity1Start\r\n" +
  215. "MyDiagnosticSource/RequestStop@Activity1Stop\r\n" +
  216. "MyDiagnosticSource/SecurityStart@Activity2Start\r\n" +
  217. "MyDiagnosticSource/SecurityStop@Activity2Stop\r\n"
  218. Defines that RequestStart will be logged with the EventSource Event Activity1Start (and the cooresponding stop) which
  219. means that all events caused between these two markers will have an activity ID assocatied with this start event.
  220. Simmilarly SecurityStart is mapped to Activity2Start.
  221. Note you can map many DiangosticSource events to the same EventSource Event (e.g. Activity1Start). As long as the
  222. activities don't nest, you can reuse the same event name (since the payloads have the DiagnosticSource name which can
  223. disambiguate). However if they nest you need to use another EventSource event because the rules of EventSource
  224. activities state that a start of the same event terminates any existing activity of the same name.
  225. As its name suggests RecursiveActivity1Start, is marked as recursive and thus can be used when the activity can nest with
  226. itself. This should not be a 'top most' activity because it is not 'self healing' (if you miss a stop, then the
  227. activity NEVER ends).
  228. See the DiagnosticSourceEventSourceBridgeTest.cs for more explicit examples of using this bridge.
  229. </summary>
  230. </member>
  231. <member name="F:System.Diagnostics.DiagnosticSourceEventSource.Keywords.Messages">
  232. <summary>
  233. Indicates diagnostics messages from DiagnosticSourceEventSource should be included.
  234. </summary>
  235. </member>
  236. <member name="F:System.Diagnostics.DiagnosticSourceEventSource.Keywords.Events">
  237. <summary>
  238. Indicates that all events from all diagnostic sources should be forwarded to the EventSource using the 'Event' event.
  239. </summary>
  240. </member>
  241. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.Message(System.String)">
  242. <summary>
  243. Used to send ad-hoc diagnostics to humans.
  244. </summary>
  245. </member>
  246. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.Event(System.String,System.String,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
  247. <summary>
  248. Events from DiagnosticSource can be forwarded to EventSource using this event.
  249. </summary>
  250. </member>
  251. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.EventJson(System.String,System.String,System.String)">
  252. <summary>
  253. This is only used on V4.5 systems that don't have the ability to log KeyValuePairs directly.
  254. It will eventually go away, but we should always reserve the ID for this.
  255. </summary>
  256. </member>
  257. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.Activity1Start(System.String,System.String,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
  258. <summary>
  259. Used to mark the beginning of an activity
  260. </summary>
  261. </member>
  262. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.Activity1Stop(System.String,System.String,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
  263. <summary>
  264. Used to mark the end of an activity
  265. </summary>
  266. </member>
  267. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.Activity2Start(System.String,System.String,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
  268. <summary>
  269. Used to mark the beginning of an activity
  270. </summary>
  271. </member>
  272. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.Activity2Stop(System.String,System.String,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
  273. <summary>
  274. Used to mark the end of an activity that can be recursive.
  275. </summary>
  276. </member>
  277. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.RecursiveActivity1Start(System.String,System.String,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
  278. <summary>
  279. Used to mark the beginning of an activity
  280. </summary>
  281. </member>
  282. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.RecursiveActivity1Stop(System.String,System.String,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
  283. <summary>
  284. Used to mark the end of an activity that can be recursive.
  285. </summary>
  286. </member>
  287. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.NewDiagnosticListener(System.String)">
  288. <summary>
  289. Fires when a new DiagnosticSource becomes available.
  290. </summary>
  291. <param name="SourceName"></param>
  292. </member>
  293. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.#ctor">
  294. <summary>
  295. This constructor uses EventSourceSettings which is only available on V4.6 and above
  296. systems. We use the EventSourceSettings to turn on support for complex types.
  297. </summary>
  298. </member>
  299. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.OnEventCommand(System.Diagnostics.Tracing.EventCommandEventArgs)">
  300. <summary>
  301. Called when the EventSource gets a command from a EventListener or ETW.
  302. </summary>
  303. </member>
  304. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.BreakPointWithDebuggerFuncEval">
  305. <summary>
  306. A function which is fully interruptible even in release code so we can stop here and
  307. do function evaluation in the debugger. Thus this is just a place that is useful
  308. for the debugger to place a breakpoint where it can inject code with function evaluation
  309. </summary>
  310. </member>
  311. <member name="T:System.Diagnostics.DiagnosticSourceEventSource.FilterAndTransform">
  312. <summary>
  313. FilterAndTransform represents on transformation specification from a DiagnosticsSource
  314. to EventSource's 'Event' method. (e.g. MySource/MyEvent:out=prop1.prop2.prop3).
  315. Its main method is 'Morph' which takes a DiagnosticSource object and morphs it into
  316. a list of string,string key value pairs.
  317. This method also contains that static 'Create/Destroy FilterAndTransformList, which
  318. simply parse a series of transformation specifications.
  319. </summary>
  320. </member>
  321. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.FilterAndTransform.CreateFilterAndTransformList(System.Diagnostics.DiagnosticSourceEventSource.FilterAndTransform@,System.String,System.Diagnostics.DiagnosticSourceEventSource)">
  322. <summary>
  323. Parses filterAndPayloadSpecs which is a list of lines each of which has the from
  324. DiagnosticSourceName/EventName:PAYLOAD_SPEC
  325. where PAYLOADSPEC is a semicolon separated list of specifications of the form
  326. OutputName=Prop1.Prop2.PropN
  327. Into linked list of FilterAndTransform that together forward events from the given
  328. DiagnosticSource's to 'eventSource'. Sets the 'specList' variable to this value
  329. (destroying anything that was there previously).
  330. By default any serializable properties of the payload object are also included
  331. in the output payload, however this feature and be tuned off by prefixing the
  332. PAYLOADSPEC with a '-'.
  333. </summary>
  334. </member>
  335. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.FilterAndTransform.DestroyFilterAndTransformList(System.Diagnostics.DiagnosticSourceEventSource.FilterAndTransform@)">
  336. <summary>
  337. This destroys (turns off) the FilterAndTransform stopping the forwarding started with CreateFilterAndTransformList
  338. </summary>
  339. <param name="specList"></param>
  340. </member>
  341. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.FilterAndTransform.#ctor(System.String,System.Int32,System.Int32,System.Diagnostics.DiagnosticSourceEventSource,System.Diagnostics.DiagnosticSourceEventSource.FilterAndTransform)">
  342. <summary>
  343. Creates one FilterAndTransform specification from filterAndPayloadSpec starting at 'startIdx' and ending just before 'endIdx'.
  344. This FilterAndTransform will subscribe to DiagnosticSources specified by the specification and forward them to 'eventSource.
  345. For convenience, the 'Next' field is set to the 'next' parameter, so you can easily form linked lists.
  346. </summary>
  347. </member>
  348. <member name="T:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec">
  349. <summary>
  350. Transform spec represents a string that describes how to extract a piece of data from
  351. the DiagnosticSource payload. An example string is OUTSTR=EVENT_VALUE.PROP1.PROP2.PROP3
  352. It has a Next field so they can be chained together in a linked list.
  353. </summary>
  354. </member>
  355. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.#ctor(System.String,System.Int32,System.Int32,System.Diagnostics.DiagnosticSourceEventSource.TransformSpec)">
  356. <summary>
  357. parse the strings 'spec' from startIdx to endIdx (points just beyond the last considered char)
  358. The syntax is ID1=ID2.ID3.ID4 .... Where ID1= is optional.
  359. </summary>
  360. </member>
  361. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.Morph(System.Object)">
  362. <summary>
  363. Given the DiagnosticSourcePayload 'obj', compute a key-value pair from it. For example
  364. if the spec is OUTSTR=EVENT_VALUE.PROP1.PROP2.PROP3 and the ultimate value of PROP3 is
  365. 10 then the return key value pair is KeyValuePair("OUTSTR","10")
  366. </summary>
  367. </member>
  368. <member name="F:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.Next">
  369. <summary>
  370. A public field that can be used to form a linked list.
  371. </summary>
  372. </member>
  373. <member name="T:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.PropertySpec">
  374. <summary>
  375. A PropertySpec represents information needed to fetch a property from
  376. and efficiently. Thus it represents a '.PROP' in a TransformSpec
  377. (and a transformSpec has a list of these).
  378. </summary>
  379. </member>
  380. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.PropertySpec.#ctor(System.String,System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.PropertySpec)">
  381. <summary>
  382. Make a new PropertySpec for a property named 'propertyName'.
  383. For convenience you can set he 'next' field to form a linked
  384. list of PropertySpecs.
  385. </summary>
  386. </member>
  387. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.PropertySpec.Fetch(System.Object)">
  388. <summary>
  389. Given an object fetch the property that this PropertySpec represents.
  390. </summary>
  391. </member>
  392. <member name="F:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.PropertySpec.Next">
  393. <summary>
  394. A public field that can be used to form a linked list.
  395. </summary>
  396. </member>
  397. <member name="T:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.PropertySpec.PropertyFetch">
  398. <summary>
  399. PropertyFetch is a helper class. It takes a PropertyInfo and then knows how
  400. to efficiently fetch that property from a .NET object (See Fetch method).
  401. It hides some slightly complex generic code.
  402. </summary>
  403. </member>
  404. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.PropertySpec.PropertyFetch.FetcherForProperty(System.Reflection.PropertyInfo)">
  405. <summary>
  406. Create a property fetcher from a .NET Reflection PropertyInfo class that
  407. represents a property of a particular type.
  408. </summary>
  409. </member>
  410. <member name="M:System.Diagnostics.DiagnosticSourceEventSource.TransformSpec.PropertySpec.PropertyFetch.Fetch(System.Object)">
  411. <summary>
  412. Given an object, fetch the property that this propertyFech represents.
  413. </summary>
  414. </member>
  415. <member name="T:System.Diagnostics.DiagnosticSourceEventSource.CallbackObserver`1">
  416. <summary>
  417. CallbackObserver is a adapter class that creates an observer (which you can pass
  418. to IObservable.Subscribe), and calls the given callback every time the 'next'
  419. operation on the IObserver happens.
  420. </summary>
  421. <typeparam name="T"></typeparam>
  422. </member>
  423. </members>
  424. </doc>