@@ -304,6 +304,14 @@ inline void apply_config_defaults(IPlugin* instance, PluginConfig& config) {
304304
305305class PluginManager {
306306 public:
307+ PluginManager () = default ;
308+ ~PluginManager () = default ;
309+
310+ PluginManager (const PluginManager&) = delete ;
311+ PluginManager& operator =(const PluginManager&) = delete ;
312+ PluginManager (PluginManager&&) = delete ;
313+ PluginManager& operator =(PluginManager&&) = delete ;
314+
307315 // Per-plugin configuration, keyed by plugin name.
308316 using ConfigMap = std::unordered_map<std::string, PluginConfig>;
309317
@@ -869,7 +877,7 @@ class PluginManager {
869877 // after built-in mixin injection (configure, service locator, event bus) and
870878 // before on_init(). Allows hosts to wire custom mixins without modifying
871879 // PluginManager source.
872- using MixinWirer = std::function<void (std::shared_ptr<IPlugin>&)>;
880+ using MixinWirer = std::function<void (const std::shared_ptr<IPlugin>&)>;
873881
874882 void add_mixin_wirer (MixinWirer wirer) {
875883 if (wirer) custom_wirers_.push_back (std::move (wirer));
@@ -1213,7 +1221,7 @@ class PluginManager {
12131221
12141222 // Wire all opt-in mixins on an instance.
12151223 // Order: validate+configure → inject services → inject events → custom wirers → init.
1216- void wire_instance (std::shared_ptr<IPlugin>& instance,
1224+ void wire_instance (const std::shared_ptr<IPlugin>& instance,
12171225 const PluginEntry& entry, const ConfigMap& config_map,
12181226 bool skip_validation = false ) {
12191227 auto resolved = resolve_plugin_config (
0 commit comments