DEV: Replace `message-bus:main` with `service:message-bus` (#17691)

This will allow consumers to inject it using `messageBus: service()` in preparation for the removal of implicit injections in Ember 4.0. `message-bus:main` is still available and will print a deprecation notice.

The MessageBus library is not en ember object, and doesn't need access to any of our injections. Therefore, we can set up a simple class which defines itself as a 'Service Factory', and returns the MessageBus library in the `create` method.
This commit is contained in:
David Taylor 2022-07-27 17:15:58 +01:00 committed by GitHub
parent 296aad430a
commit 96abd72387
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 33 additions and 14 deletions

View File

@ -11,7 +11,7 @@ export default {
site.set("banner", banner);
const messageBus = container.lookup("message-bus:main");
const messageBus = container.lookup("service:message-bus");
if (!messageBus) {
return;
}

View File

@ -7,7 +7,7 @@ export default {
name: "live-development",
initialize(container) {
const messageBus = container.lookup("message-bus:main");
const messageBus = container.lookup("service:message-bus");
const session = container.lookup("session:main");
// Preserve preview_theme_id=## and pp=async-flamegraph parameters across pages

View File

@ -10,7 +10,7 @@ export default {
after: "message-bus",
initialize(container) {
const messageBus = container.lookup("message-bus:main");
const messageBus = container.lookup("service:message-bus");
if (!messageBus) {
return;

View File

@ -12,7 +12,7 @@ export default {
}
const siteSettings = container.lookup("site-settings:main");
const messageBus = container.lookup("message-bus:main");
const messageBus = container.lookup("service:message-bus");
const keyValueStore = container.lookup("service:key-value-store");
const currentUser = container.lookup("current-user:main");
LogsNotice.reopenClass(Singleton, {

View File

@ -40,7 +40,7 @@ export default {
return;
}
const messageBus = container.lookup("message-bus:main"),
const messageBus = container.lookup("service:message-bus"),
user = container.lookup("current-user:main"),
siteSettings = container.lookup("site-settings:main");

View File

@ -4,7 +4,7 @@ export default {
after: "message-bus",
initialize(container) {
const messageBus = container.lookup("message-bus:main");
const messageBus = container.lookup("service:message-bus");
if (!messageBus) {
return;
}

View File

@ -20,7 +20,7 @@ export default {
initialize(container) {
const user = container.lookup("current-user:main");
const bus = container.lookup("message-bus:main");
const bus = container.lookup("service:message-bus");
const appEvents = container.lookup("service:app-events");
if (user) {

View File

@ -2,7 +2,6 @@ import TopicTrackingState, {
startTracking,
} from "discourse/models/topic-tracking-state";
import DiscourseLocation from "discourse/lib/discourse-location";
import MessageBus from "message-bus-client";
import Session from "discourse/models/session";
import Site from "discourse/models/site";
import User from "discourse/models/user";
@ -17,9 +16,6 @@ export function registerObjects(app) {
}
app.__registeredObjects__ = true;
// TODO: This should be included properly
app.register("message-bus:main", MessageBus, { instantiate: false });
const siteSettings = app.SiteSettings;
app.register("site-settings:main", siteSettings, { instantiate: false });
}
@ -98,6 +94,15 @@ export default {
dropFrom: "3.0.0",
});
deprecateRegistration({
app,
container,
oldName: "message-bus:main",
newName: "service:message-bus",
since: "2.9.0.beta7",
dropFrom: "3.0.0",
});
let siteSettings = container.lookup("site-settings:main");
const currentUser = User.current();
@ -105,7 +110,7 @@ export default {
app.currentUser = currentUser;
const topicTrackingState = TopicTrackingState.create({
messageBus: MessageBus,
messageBus: container.lookup("service:message-bus"),
siteSettings,
currentUser,
});
@ -129,14 +134,19 @@ export default {
app.inject(t, "site", "site:main");
app.inject(t, "searchService", "service:search");
app.inject(t, "session", "session:main");
app.inject(t, "messageBus", "message-bus:main");
app.inject(t, "messageBus", "service:message-bus");
app.inject(t, "siteSettings", "site-settings:main");
app.inject(t, "topicTrackingState", "topic-tracking-state:main");
app.inject(t, "keyValueStore", "service:key-value-store");
});
app.inject("service", "session", "session:main");
app.inject("service", "messageBus", "message-bus:main");
injectServiceIntoService({
container,
app,
property: "messageBus",
specifier: "service:message-bus",
});
app.inject("service", "siteSettings", "site-settings:main");
app.inject("service", "topicTrackingState", "topic-tracking-state:main");
injectServiceIntoService({

View File

@ -0,0 +1,9 @@
import MessageBus from "message-bus-client";
export default class MessageBusService {
static isServiceFactory = true;
static create() {
return MessageBus;
}
}