Я начал использовать InversifyJS в разработке Dynamics 365. Чтобы дать вам некоторый контекст, Dynamics позволяет вам расширить платформу для написания пользовательской бизнес-логики (используя JS) и присоединить ее к определенным событиям формы. В этом примере я хочу создать экземпляр класса логики своего бизнеса и выполнить свой пользовательский код в событии onload формы. Код должен выглядеть так:
namespace Example {
export function onLoad(context: ExternalContext) {
set bl = container.resolve<BusinessLogic>(BusinessLogic);
bl.doSomething();
}
}
Как вы можете себе представить, функция onLoad
будет вызываться Dynamics 365, когда происходит событие. Контекст формы (ExternalContext
в этом примере) будет передан в качестве параметра функции. Этот объект действительно важен, потому что он позволяет нашему коду взаимодействовать с элементами управления, существующими в форме, и именно этот объект я хочу внедрить в BusinessLogic
класс .
Класс BusinessLogic:
@injectable()
export class BusinessLogic {
protected readonly _context: ExternalContext;
protected readonly _otherDependency: OtherDependency;
constructor(
@inject(ExternalContext) formContext: ExternalContext,
@inject(OtherDependency) otherDependency: OtherDependency) {
this._formContext = formContext;
this._otherDependency = otherDependency;
}
doSomething() {
this._otherDependency.foo(this._context.value1);
}
}
Просто еще один пример зависимости:
@injectable()
export class OtherDependency {
foo(propertyValue: string) {
// do stuff...
}
}
Как мне зарегистрировать / внедрить объект ExternalContext
, который платформа передала моему методу onLoad
, в мой бизнес-класс? Я думаю о сохранении этого в контексте контейнера, но я уверен, что есть лучший способ сделать это.
container.bind<ExternalContext>().toDynamicValue((context) => {
//context??
});