public PlusModuleDescriptor(
            [NotNull] Type type,
            [NotNull] IPlusModule instance,
            bool isLoadedAsPlugIn)
        {
            Check.NotNull(type, nameof(type));
            Check.NotNull(instance, nameof(instance));

            if (!type.GetTypeInfo().IsAssignableFrom(instance.GetType()))
            {
                throw new ArgumentException($"Given module instance ({instance.GetType().AssemblyQualifiedName}) is not an instance of given module type: {type.AssemblyQualifiedName}");
            }

            Type             = type;
            Assembly         = type.Assembly;
            Instance         = instance;
            IsLoadedAsPlugIn = isLoadedAsPlugIn;

            _dependencies = new List <IPlusModuleDescriptor>();
        }
 public override void Initialize(ApplicationInitializationContext context, IPlusModule module)
 {
     (module as IOnApplicationInitialization)?.OnApplicationInitialization(context);
 }
 public override void Shutdown(ApplicationShutdownContext context, IPlusModule module)
 {
     (module as IOnApplicationShutdown)?.OnApplicationShutdown(context);
 }
 public virtual void Shutdown(ApplicationShutdownContext context, IPlusModule module)
 {
 }
 public virtual void Initialize(ApplicationInitializationContext context, IPlusModule module)
 {
 }