Add a custom API

Is there some custom hooks to allow me to add a custom API to Telligent? I see the IApi interface, but it looks like the DI is hand rolled in the Telligent.Evolution.Web.Modules.ApiModule class. I would like an API and have the Telligent context like the existing APIs.

I have also create a controller with the attribute RestResource(""), but no luck.

    [RestResource("test")]
    public class TestController : IController, ITestController
    {
        private readonly IMapper<User, RestUser> _userMapper;

        public TestController(IMapper<User, RestUser> userMapper)
        {
            _userMapper = userMapper;
        }

        public TestResponse Show(TestRequest request)
        {
            TestResponse response = new TestResponse((IRestRequest)request);

            response.Answer = "yes";

            return response;
        }
    }

And then registered the actions with the IRegisterActions plugin

    public class TestActionRegistrar : IRegisterActions
    {
        public void RegisterActions(IActionRegistry registry)
        {
            registry.RegisterAllActionsIn(this.GetType().Assembly);
        }
    }

Then registered the Service loader

    public class TestModuleIServiceLoader : IServiceLoader
    {
        public void Load(IBindingSyntax controller)
        {
            controller.Bind<IRegisterRoutes>().To<TestRouteRegistrar>().InSingletonScope();
            controller.Bind<IRegisterActions>().To<TestActionRegistrar>().InSingletonScope();
        }
    }

I think I reached the end of the line, sealed class. The DI for services is a sealed class. Looks like it only adds Telligent services and not any I can build. Might need a custom Global.asax

    private sealed class ContentViewWriteContext : IDisposable
    {
      private readonly ITenantSiteContext _context;

    public ContentViewWriteContext(Guid id)
    {
        if (!Services.IsInitialized)
          Services.Initialize((IEnumerable<Assembly>) new Assembly[1]
          {
            Assembly.Load(Strings.Get(1951479))
          });
        this._context = Services.Get<ITenantSiteContext>();
        this._context.SetCurrent(id);
      }

      public void Dispose()
      {
        this._context.Unload();
      }
    }



More code
[edited by: Chris Auer at 8:40 PM (GMT 0) on Tue, Nov 10 2020]