In InversifyJS, are there any specific advantages of following the approaches outlined in factory injection guide and constructor injection guide for injecting factories and constructors respectively over just using toDynamicValue.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
toConstructor
If you use a toConstructor
you will be able to pass arguments to the constructor but you won't be able to resolve those arguments (unless you inject them as well).
container.bind<interfaces.Newable<Katana>>("Newable<Katana>")
.toConstructor<Katana>(Katana);
toDynamicValue
If you use a toDynamicValue
you will be able to pass constructor arguments to the constructor and resolve those arguments using the context
.
container.bind<Katana>("Katana")
.toDynamicValue((context: interfaces.Context) => {
return new Katana(context.container.get("SomeDependency"));
});
toFactory
If you use a toFactory
you will be able to pass constructor arguments to the constructor and resolve those arguments using the context
but you will also be able to produce different outputs based on factory arguments.
container.bind<interfaces.Factory<Weapon>>("Factory<Weapon>")
.toFactory<Weapon>((context: interfaces.Context) => {
return (throwable: boolean) => {
if (throwable) {
return context.container.getTagged<Weapon>(
"Weapon", "throwable", true
);
} else {
return context.container.getTagged<Weapon>(
"Weapon", "throwable", false
);
}
};
});