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.

CAP.BuilderTest.cs 4.4 KiB

6 years ago
Release 2.1 (#55) * add dashboard branch. * add dashboard * add helper methods. * Add data model. * add options. * add empty implement * add dashbaord * add dashboard * Fixed spelling error * rename file. * add dashbaord feature * impl dashboard storage * update nuget reference. * add pages. * deleted unused fiels. * modify resource. * update resource. * rename * update dashboard * rename * impl monitoring api interface. * update solution files. * update samples. * dashboard. * add jsonview resource files. * add json dispatcher. * modify published pages. * add routes. * update pages. * update resources. * update dashboard. * add dashboard of sql server storage impl * nesting files. * fixed query bug. * update resource. * remove some api. * add subscriber page. * update sample * add resource. * remove api. * add SubscriberPage * add resource * generate cshtml. * modify html two table to one table. * update resource. * update css * update subscriber page. * refactor. * cleanup. * cleanup code. * impl history monitoring api. * add home page recevied message real-time * add legend styles. * update js. * modify axis color. * add resource. * update dashboard home page. * update css. * update resource. * modify DefaultSucceedMessageExpirationAfter to 24 hours. * add resx, * add consul discovery. * remove unused file. * add node page. * add node page * node discovery * add kafka sqlserver sample. * update sample. * add okstats. * refactor. * fixed kafka client bugs. * modify node and subscriber pages * refactor. * add Gateway middleware * remove unused files. * update resource. * update gateway. * refactor. * update samples. * remove base middleware * add node switch click event. * add NodeId config to options. * upgrade dependent version. * add PathMatch configuration * update NodePage.cshtml * remove session * remove matchPath * refactor * refactor dashboard middleware * gateway proxy middleware function maturation * remove cookie exp * refactor and remove files. * add CapCache to cache server nodes. * refactor. * renamed message dto. * add extended interface of IContentSerializer and JsonContentSerializer * modify unit test * check the requirement when CAP start. * correct spelling * cleanup code. * add resources. * processing pages will contains Scheduled and Enqueued messages. * processing pages will contains Scheduled and Enqueued messages. * ignore NU1701 Warning. * renamed file. * refactor * implements dashboard interface. * rename reference class. * add mysql monitoring api impl * fix bug of connection driver. * remove cap.UseDashboard. It's will be automatically enabled by registerd services. * fix sql bug * cleanup code and fix spelling * fix postgre sql bug. * fix mysql sql bug. * when storage a received message raising an eception, we will reject the message to queue. * fix spelling mistake * add dashboard instructions to readme * modify error log content. * fix postger sql bug. * fix consul discovery bug. * add dashboard introduction to readme.md * update english resource. * Update README.md * renamed files. * fix postgre sql bug. * cleanup code. * update tests. * rename file. * update samples. * Improved query performance without lock table. (#36) * update sample. * update samples. * fix data reader uncolsed bug. * update add jsonproperty * refactor * revert FetchNextMessageAsync sql * add helper method. * rafactor subscriber handler. * add FailedRetryCount options. * rafactor publisher excutor. * add IPublishExecutor * add failed message processor. * inject failed message processor. * refactor sql storage. * fixed unit tests. * fixed unit test. * fixed postgresql tests. * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * add LAN ip to LocalRequestsOnlyAuthorizationFilter * add and update resource. * add current node name to layout page if user enabled node discovery * modify unit tests. * add callback message sende tests. * add deserlizer by type to IContentSerializer * refactor unit tests * add summary comment. * refactor async method. * add comment and fixed spell error. * refactor. * add custom content serializer extension to CapBuilder * add IMessagePacker * refactor. * add connection pool for kafka producer. * add determines whether the query is null. * add connection pool size config to KafkaOption. * fixed json JObject bug * add custom message wapper interface * remove unused code. * fixed callback topic send error bug. * refactor. * update unit tests. * update samples. * upgrade dependent package. * remove some class from Abstraction namespce to Internal. * optimize consumer related code * add ICallbackMessageSender to DI with singleton. * add and fixed some unit tests. * refactor namespace. * modify class protected level * assemblies internal class are visible to test project * add DeSerialize method to IContentSerializer with type deseralize * refactoring * Fix the phone style dispaly problem * add logs * refactoring * upgrading `Confluent.Kafka` package * Optimize message queue error message prompt. * reorganize error message prompts. * modify error message prompt * add summary comments. * modify dependent * disabled print connection closed log. see: https://github.com/edenhill/librdkafka/issues/516 * Update README.md * Update README.md * Update README.zh-cn.md * Update README.zh-cn.md * fix dashboard not config discovery throw exceptions bug. * Update README.md * update readme * Fixed serialized the message type bug. (#53) * Update README.md * Update README.md * refactoring * refactoring * update readme. * update readme. * add summary comment. * refactoring * optimizing publisher interface * update readme * update readme. * add summary comment. * add summary comment. * add summary comment. * add summary comment. * upgrading package * add summary comment. * optimize the RabbitMQ connection pool * fix the producer connection returned * dispose resource when connection pool is full
7 years ago
Release 2.1 (#55) * add dashboard branch. * add dashboard * add helper methods. * Add data model. * add options. * add empty implement * add dashbaord * add dashboard * Fixed spelling error * rename file. * add dashbaord feature * impl dashboard storage * update nuget reference. * add pages. * deleted unused fiels. * modify resource. * update resource. * rename * update dashboard * rename * impl monitoring api interface. * update solution files. * update samples. * dashboard. * add jsonview resource files. * add json dispatcher. * modify published pages. * add routes. * update pages. * update resources. * update dashboard. * add dashboard of sql server storage impl * nesting files. * fixed query bug. * update resource. * remove some api. * add subscriber page. * update sample * add resource. * remove api. * add SubscriberPage * add resource * generate cshtml. * modify html two table to one table. * update resource. * update css * update subscriber page. * refactor. * cleanup. * cleanup code. * impl history monitoring api. * add home page recevied message real-time * add legend styles. * update js. * modify axis color. * add resource. * update dashboard home page. * update css. * update resource. * modify DefaultSucceedMessageExpirationAfter to 24 hours. * add resx, * add consul discovery. * remove unused file. * add node page. * add node page * node discovery * add kafka sqlserver sample. * update sample. * add okstats. * refactor. * fixed kafka client bugs. * modify node and subscriber pages * refactor. * add Gateway middleware * remove unused files. * update resource. * update gateway. * refactor. * update samples. * remove base middleware * add node switch click event. * add NodeId config to options. * upgrade dependent version. * add PathMatch configuration * update NodePage.cshtml * remove session * remove matchPath * refactor * refactor dashboard middleware * gateway proxy middleware function maturation * remove cookie exp * refactor and remove files. * add CapCache to cache server nodes. * refactor. * renamed message dto. * add extended interface of IContentSerializer and JsonContentSerializer * modify unit test * check the requirement when CAP start. * correct spelling * cleanup code. * add resources. * processing pages will contains Scheduled and Enqueued messages. * processing pages will contains Scheduled and Enqueued messages. * ignore NU1701 Warning. * renamed file. * refactor * implements dashboard interface. * rename reference class. * add mysql monitoring api impl * fix bug of connection driver. * remove cap.UseDashboard. It's will be automatically enabled by registerd services. * fix sql bug * cleanup code and fix spelling * fix postgre sql bug. * fix mysql sql bug. * when storage a received message raising an eception, we will reject the message to queue. * fix spelling mistake * add dashboard instructions to readme * modify error log content. * fix postger sql bug. * fix consul discovery bug. * add dashboard introduction to readme.md * update english resource. * Update README.md * renamed files. * fix postgre sql bug. * cleanup code. * update tests. * rename file. * update samples. * Improved query performance without lock table. (#36) * update sample. * update samples. * fix data reader uncolsed bug. * update add jsonproperty * refactor * revert FetchNextMessageAsync sql * add helper method. * rafactor subscriber handler. * add FailedRetryCount options. * rafactor publisher excutor. * add IPublishExecutor * add failed message processor. * inject failed message processor. * refactor sql storage. * fixed unit tests. * fixed unit test. * fixed postgresql tests. * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * add LAN ip to LocalRequestsOnlyAuthorizationFilter * add and update resource. * add current node name to layout page if user enabled node discovery * modify unit tests. * add callback message sende tests. * add deserlizer by type to IContentSerializer * refactor unit tests * add summary comment. * refactor async method. * add comment and fixed spell error. * refactor. * add custom content serializer extension to CapBuilder * add IMessagePacker * refactor. * add connection pool for kafka producer. * add determines whether the query is null. * add connection pool size config to KafkaOption. * fixed json JObject bug * add custom message wapper interface * remove unused code. * fixed callback topic send error bug. * refactor. * update unit tests. * update samples. * upgrade dependent package. * remove some class from Abstraction namespce to Internal. * optimize consumer related code * add ICallbackMessageSender to DI with singleton. * add and fixed some unit tests. * refactor namespace. * modify class protected level * assemblies internal class are visible to test project * add DeSerialize method to IContentSerializer with type deseralize * refactoring * Fix the phone style dispaly problem * add logs * refactoring * upgrading `Confluent.Kafka` package * Optimize message queue error message prompt. * reorganize error message prompts. * modify error message prompt * add summary comments. * modify dependent * disabled print connection closed log. see: https://github.com/edenhill/librdkafka/issues/516 * Update README.md * Update README.md * Update README.zh-cn.md * Update README.zh-cn.md * fix dashboard not config discovery throw exceptions bug. * Update README.md * update readme * Fixed serialized the message type bug. (#53) * Update README.md * Update README.md * refactoring * refactoring * update readme. * update readme. * add summary comment. * refactoring * optimizing publisher interface * update readme * update readme. * add summary comment. * add summary comment. * add summary comment. * add summary comment. * upgrading package * add summary comment. * optimize the RabbitMQ connection pool * fix the producer connection returned * dispose resource when connection pool is full
7 years ago
7 years ago
Release 2.1 (#55) * add dashboard branch. * add dashboard * add helper methods. * Add data model. * add options. * add empty implement * add dashbaord * add dashboard * Fixed spelling error * rename file. * add dashbaord feature * impl dashboard storage * update nuget reference. * add pages. * deleted unused fiels. * modify resource. * update resource. * rename * update dashboard * rename * impl monitoring api interface. * update solution files. * update samples. * dashboard. * add jsonview resource files. * add json dispatcher. * modify published pages. * add routes. * update pages. * update resources. * update dashboard. * add dashboard of sql server storage impl * nesting files. * fixed query bug. * update resource. * remove some api. * add subscriber page. * update sample * add resource. * remove api. * add SubscriberPage * add resource * generate cshtml. * modify html two table to one table. * update resource. * update css * update subscriber page. * refactor. * cleanup. * cleanup code. * impl history monitoring api. * add home page recevied message real-time * add legend styles. * update js. * modify axis color. * add resource. * update dashboard home page. * update css. * update resource. * modify DefaultSucceedMessageExpirationAfter to 24 hours. * add resx, * add consul discovery. * remove unused file. * add node page. * add node page * node discovery * add kafka sqlserver sample. * update sample. * add okstats. * refactor. * fixed kafka client bugs. * modify node and subscriber pages * refactor. * add Gateway middleware * remove unused files. * update resource. * update gateway. * refactor. * update samples. * remove base middleware * add node switch click event. * add NodeId config to options. * upgrade dependent version. * add PathMatch configuration * update NodePage.cshtml * remove session * remove matchPath * refactor * refactor dashboard middleware * gateway proxy middleware function maturation * remove cookie exp * refactor and remove files. * add CapCache to cache server nodes. * refactor. * renamed message dto. * add extended interface of IContentSerializer and JsonContentSerializer * modify unit test * check the requirement when CAP start. * correct spelling * cleanup code. * add resources. * processing pages will contains Scheduled and Enqueued messages. * processing pages will contains Scheduled and Enqueued messages. * ignore NU1701 Warning. * renamed file. * refactor * implements dashboard interface. * rename reference class. * add mysql monitoring api impl * fix bug of connection driver. * remove cap.UseDashboard. It's will be automatically enabled by registerd services. * fix sql bug * cleanup code and fix spelling * fix postgre sql bug. * fix mysql sql bug. * when storage a received message raising an eception, we will reject the message to queue. * fix spelling mistake * add dashboard instructions to readme * modify error log content. * fix postger sql bug. * fix consul discovery bug. * add dashboard introduction to readme.md * update english resource. * Update README.md * renamed files. * fix postgre sql bug. * cleanup code. * update tests. * rename file. * update samples. * Improved query performance without lock table. (#36) * update sample. * update samples. * fix data reader uncolsed bug. * update add jsonproperty * refactor * revert FetchNextMessageAsync sql * add helper method. * rafactor subscriber handler. * add FailedRetryCount options. * rafactor publisher excutor. * add IPublishExecutor * add failed message processor. * inject failed message processor. * refactor sql storage. * fixed unit tests. * fixed unit test. * fixed postgresql tests. * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * add LAN ip to LocalRequestsOnlyAuthorizationFilter * add and update resource. * add current node name to layout page if user enabled node discovery * modify unit tests. * add callback message sende tests. * add deserlizer by type to IContentSerializer * refactor unit tests * add summary comment. * refactor async method. * add comment and fixed spell error. * refactor. * add custom content serializer extension to CapBuilder * add IMessagePacker * refactor. * add connection pool for kafka producer. * add determines whether the query is null. * add connection pool size config to KafkaOption. * fixed json JObject bug * add custom message wapper interface * remove unused code. * fixed callback topic send error bug. * refactor. * update unit tests. * update samples. * upgrade dependent package. * remove some class from Abstraction namespce to Internal. * optimize consumer related code * add ICallbackMessageSender to DI with singleton. * add and fixed some unit tests. * refactor namespace. * modify class protected level * assemblies internal class are visible to test project * add DeSerialize method to IContentSerializer with type deseralize * refactoring * Fix the phone style dispaly problem * add logs * refactoring * upgrading `Confluent.Kafka` package * Optimize message queue error message prompt. * reorganize error message prompts. * modify error message prompt * add summary comments. * modify dependent * disabled print connection closed log. see: https://github.com/edenhill/librdkafka/issues/516 * Update README.md * Update README.md * Update README.zh-cn.md * Update README.zh-cn.md * fix dashboard not config discovery throw exceptions bug. * Update README.md * update readme * Fixed serialized the message type bug. (#53) * Update README.md * Update README.md * refactoring * refactoring * update readme. * update readme. * add summary comment. * refactoring * optimizing publisher interface * update readme * update readme. * add summary comment. * add summary comment. * add summary comment. * add summary comment. * upgrading package * add summary comment. * optimize the RabbitMQ connection pool * fix the producer connection returned * dispose resource when connection pool is full
7 years ago
7 years ago
7 years ago
Release 2.1 (#55) * add dashboard branch. * add dashboard * add helper methods. * Add data model. * add options. * add empty implement * add dashbaord * add dashboard * Fixed spelling error * rename file. * add dashbaord feature * impl dashboard storage * update nuget reference. * add pages. * deleted unused fiels. * modify resource. * update resource. * rename * update dashboard * rename * impl monitoring api interface. * update solution files. * update samples. * dashboard. * add jsonview resource files. * add json dispatcher. * modify published pages. * add routes. * update pages. * update resources. * update dashboard. * add dashboard of sql server storage impl * nesting files. * fixed query bug. * update resource. * remove some api. * add subscriber page. * update sample * add resource. * remove api. * add SubscriberPage * add resource * generate cshtml. * modify html two table to one table. * update resource. * update css * update subscriber page. * refactor. * cleanup. * cleanup code. * impl history monitoring api. * add home page recevied message real-time * add legend styles. * update js. * modify axis color. * add resource. * update dashboard home page. * update css. * update resource. * modify DefaultSucceedMessageExpirationAfter to 24 hours. * add resx, * add consul discovery. * remove unused file. * add node page. * add node page * node discovery * add kafka sqlserver sample. * update sample. * add okstats. * refactor. * fixed kafka client bugs. * modify node and subscriber pages * refactor. * add Gateway middleware * remove unused files. * update resource. * update gateway. * refactor. * update samples. * remove base middleware * add node switch click event. * add NodeId config to options. * upgrade dependent version. * add PathMatch configuration * update NodePage.cshtml * remove session * remove matchPath * refactor * refactor dashboard middleware * gateway proxy middleware function maturation * remove cookie exp * refactor and remove files. * add CapCache to cache server nodes. * refactor. * renamed message dto. * add extended interface of IContentSerializer and JsonContentSerializer * modify unit test * check the requirement when CAP start. * correct spelling * cleanup code. * add resources. * processing pages will contains Scheduled and Enqueued messages. * processing pages will contains Scheduled and Enqueued messages. * ignore NU1701 Warning. * renamed file. * refactor * implements dashboard interface. * rename reference class. * add mysql monitoring api impl * fix bug of connection driver. * remove cap.UseDashboard. It's will be automatically enabled by registerd services. * fix sql bug * cleanup code and fix spelling * fix postgre sql bug. * fix mysql sql bug. * when storage a received message raising an eception, we will reject the message to queue. * fix spelling mistake * add dashboard instructions to readme * modify error log content. * fix postger sql bug. * fix consul discovery bug. * add dashboard introduction to readme.md * update english resource. * Update README.md * renamed files. * fix postgre sql bug. * cleanup code. * update tests. * rename file. * update samples. * Improved query performance without lock table. (#36) * update sample. * update samples. * fix data reader uncolsed bug. * update add jsonproperty * refactor * revert FetchNextMessageAsync sql * add helper method. * rafactor subscriber handler. * add FailedRetryCount options. * rafactor publisher excutor. * add IPublishExecutor * add failed message processor. * inject failed message processor. * refactor sql storage. * fixed unit tests. * fixed unit test. * fixed postgresql tests. * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * add LAN ip to LocalRequestsOnlyAuthorizationFilter * add and update resource. * add current node name to layout page if user enabled node discovery * modify unit tests. * add callback message sende tests. * add deserlizer by type to IContentSerializer * refactor unit tests * add summary comment. * refactor async method. * add comment and fixed spell error. * refactor. * add custom content serializer extension to CapBuilder * add IMessagePacker * refactor. * add connection pool for kafka producer. * add determines whether the query is null. * add connection pool size config to KafkaOption. * fixed json JObject bug * add custom message wapper interface * remove unused code. * fixed callback topic send error bug. * refactor. * update unit tests. * update samples. * upgrade dependent package. * remove some class from Abstraction namespce to Internal. * optimize consumer related code * add ICallbackMessageSender to DI with singleton. * add and fixed some unit tests. * refactor namespace. * modify class protected level * assemblies internal class are visible to test project * add DeSerialize method to IContentSerializer with type deseralize * refactoring * Fix the phone style dispaly problem * add logs * refactoring * upgrading `Confluent.Kafka` package * Optimize message queue error message prompt. * reorganize error message prompts. * modify error message prompt * add summary comments. * modify dependent * disabled print connection closed log. see: https://github.com/edenhill/librdkafka/issues/516 * Update README.md * Update README.md * Update README.zh-cn.md * Update README.zh-cn.md * fix dashboard not config discovery throw exceptions bug. * Update README.md * update readme * Fixed serialized the message type bug. (#53) * Update README.md * Update README.md * refactoring * refactoring * update readme. * update readme. * add summary comment. * refactoring * optimizing publisher interface * update readme * update readme. * add summary comment. * add summary comment. * add summary comment. * add summary comment. * upgrading package * add summary comment. * optimize the RabbitMQ connection pool * fix the producer connection returned * dispose resource when connection pool is full
7 years ago
6 years ago
6 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using DotNetCore.CAP.Abstractions;
  6. using DotNetCore.CAP.Messages;
  7. using Microsoft.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.Options;
  9. using Xunit;
  10. namespace DotNetCore.CAP.Test
  11. {
  12. public class CapBuilderTest
  13. {
  14. [Fact]
  15. public void CanCreateInstanceAndGetService()
  16. {
  17. var services = new ServiceCollection();
  18. services.AddSingleton<ICapPublisher, MyProducerService>();
  19. var builder = new CapBuilder(services);
  20. Assert.NotNull(builder);
  21. var count = builder.Services.Count;
  22. Assert.Equal(1, count);
  23. var provider = services.BuildServiceProvider();
  24. var capPublisher = provider.GetService<ICapPublisher>();
  25. Assert.NotNull(capPublisher);
  26. }
  27. [Fact]
  28. public void CanAddCapService()
  29. {
  30. var services = new ServiceCollection();
  31. services.AddCap(x => { });
  32. var builder = services.BuildServiceProvider();
  33. var markService = builder.GetService<CapMarkerService>();
  34. Assert.NotNull(markService);
  35. }
  36. [Fact]
  37. public void CanOverridePublishService()
  38. {
  39. var services = new ServiceCollection();
  40. services.AddCap(x => { }).AddProducerService<MyProducerService>();
  41. var thingy = services.BuildServiceProvider()
  42. .GetRequiredService<ICapPublisher>() as MyProducerService;
  43. Assert.NotNull(thingy);
  44. }
  45. [Fact]
  46. public void CanOverrideContentSerialize()
  47. {
  48. var services = new ServiceCollection();
  49. services.AddCap(x => { }).AddContentSerializer<MyContentSerializer>();
  50. var thingy = services.BuildServiceProvider()
  51. .GetRequiredService<IContentSerializer>() as MyContentSerializer;
  52. Assert.NotNull(thingy);
  53. }
  54. [Fact]
  55. public void CanOverrideMessagePack()
  56. {
  57. var services = new ServiceCollection();
  58. services.AddCap(x => { }).AddMessagePacker<MyMessagePacker>();
  59. var thingy = services.BuildServiceProvider()
  60. .GetRequiredService<IMessagePacker>() as MyMessagePacker;
  61. Assert.NotNull(thingy);
  62. }
  63. [Fact]
  64. public void CanResolveCapOptions()
  65. {
  66. var services = new ServiceCollection();
  67. services.AddCap(x => { });
  68. var builder = services.BuildServiceProvider();
  69. var capOptions = builder.GetService<IOptions<CapOptions>>().Value;
  70. Assert.NotNull(capOptions);
  71. }
  72. private class MyMessagePacker : IMessagePacker
  73. {
  74. public string Pack(CapMessage obj)
  75. {
  76. throw new NotImplementedException();
  77. }
  78. public CapMessage UnPack(string packingMessage)
  79. {
  80. throw new NotImplementedException();
  81. }
  82. }
  83. private class MyContentSerializer : IContentSerializer
  84. {
  85. public T DeSerialize<T>(string content)
  86. {
  87. throw new NotImplementedException();
  88. }
  89. public object DeSerialize(string content, Type type)
  90. {
  91. throw new NotImplementedException();
  92. }
  93. public string Serialize<T>(T obj)
  94. {
  95. throw new NotImplementedException();
  96. }
  97. }
  98. private class MyProducerService : ICapPublisher
  99. {
  100. public IServiceProvider ServiceProvider { get; }
  101. public AsyncLocal<ICapTransaction> Transaction { get; }
  102. public Task PublishAsync<T>(string name, T contentObj, string callbackName = null,
  103. CancellationToken cancellationToken = default(CancellationToken))
  104. {
  105. throw new NotImplementedException();
  106. }
  107. public Task PublishAsync<T>(string name, T contentObj, IDictionary<string, string> optionHeaders = null,
  108. CancellationToken cancellationToken = default)
  109. {
  110. throw new NotImplementedException();
  111. }
  112. public void Publish<T>(string name, T contentObj, string callbackName = null)
  113. {
  114. throw new NotImplementedException();
  115. }
  116. }
  117. }
  118. }