Modularity
Modularity support for Shiny is a preview feature and can be used by overriding the ConfigureModuleCatalog
method in the PrismStartup
, and adding modules just as you would do in the PrismApplication.
Why on earth would I use this¶
Ok it's a fair question why should you use this? Let's say that you are trying to build out a Modular application with Prism, but you also need some things from Shiny like you need to register some sort of Background Service. Rather than push the buck to the consuming application to wire everything up this can be taken of in the Module which can now be reused across apps with a more minimalistic configuration.
How to use Modules with Shiny and Prism¶
public class AppStartup : PrismStartup
{
public MockModuleStartup(ITestOutputHelper testOutputHelper)
: base(testOutputHelper)
{
}
protected override void ConfigureServices(IServiceCollection services)
{
// Register your services here...
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule<MyShinyModule>();
}
}
Note
If adding modules here do not add the same module in your PrismApplication!
Creating a Shiny Module¶
Ok as if Modularity wasn't confusing enough... now we had to go and add a Shiny Module... The Shiny Module lets us continue to work with the ServiceCollection
that you may have started with in the Startup class. As you'll see by inheriting from ShinyModule
or StartupModule
we can add services that we may need to here.
public class MyShinyModule : ShinyModule
{
protected override void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IMockModuleServiceA, MockModuleServiceA>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.Register<IMockModuleServiceB, MockModuleServiceB>();
}
}
Critical Note
Depending on what you are registering you may need to use a StartupModule
which forces the registration to be actually at Startup.