How to provide instance from DI in useValue?
I'm using angular 7.0.1
In short, I'm interest how to get instance of the service by DI, when providing new value:providers:[{provide: D3utils, useValue: new D3Utils('selector', StringUtils)]
, where StringUtils
should be provided by DI.
3 classes are playing:
D3Utils
-constructor(selector, stringUtils)
StringUtils
D3UtilsProvider
-constructor(stringUtils)
. Has methodgetD3Utils(selector) => new D3Utils(selector, this.stringUtils)
Code of the D3Utils
and the D3UtilsBuilder
class D3Utils implements ID3Utils
constructor(private selector: string, private stringUtils: StringUtils)
export class D3UtilsProvider
constructor(private stringUtils: StringUtils)
public getD3Utils(selector: string)
return new D3Utils(selector, this.stringUtils);
The problem is that D3Utils needs StringUtils which is provided by DI and one parameter that should be passed manually. I want to write the next:
in first module
providers: [
provide: D3Utils,
useValue: D3UtilsProvider.getBuilder('module1')
];
in second module
providers: [
provide: D3Utils,
useValue: D3UtilsProvider.getBuilder('module2')
];
So in line D3UtilsProvider.getBuilder('module2')
I need the instance of the D3UtilsProvider
, which needs the StringUtils
from DI. How to do this?
PS. What workarounds I have found
The first.
provide: 'd3selector', useValue: '#d3module1'
provide: 'd3selector', useValue: '#d3module1'
I don't like that it is absolutely not obvious what is d3selector.
The second.
Create two childs inherited from D3Utils
: Module1D3Utils
and Module2D3Utils
, each of them hardcode the selector in their constructors. I don't like use inheritance with DI, because each time you are editing dependencies, you need to go through the all inheritance tree.
The third.
Make getD3Utils
static. Not working, because I want to pass StringUtils
to D3UtilsProvider
with DI.
The fourth
provide: D3Utils, useValue: new D3Utils('#d3module1', new StringUtils())
This is working only for this particular case, because StringUtils currently has no dependencies.
angular dependency-injection
add a comment |
I'm using angular 7.0.1
In short, I'm interest how to get instance of the service by DI, when providing new value:providers:[{provide: D3utils, useValue: new D3Utils('selector', StringUtils)]
, where StringUtils
should be provided by DI.
3 classes are playing:
D3Utils
-constructor(selector, stringUtils)
StringUtils
D3UtilsProvider
-constructor(stringUtils)
. Has methodgetD3Utils(selector) => new D3Utils(selector, this.stringUtils)
Code of the D3Utils
and the D3UtilsBuilder
class D3Utils implements ID3Utils
constructor(private selector: string, private stringUtils: StringUtils)
export class D3UtilsProvider
constructor(private stringUtils: StringUtils)
public getD3Utils(selector: string)
return new D3Utils(selector, this.stringUtils);
The problem is that D3Utils needs StringUtils which is provided by DI and one parameter that should be passed manually. I want to write the next:
in first module
providers: [
provide: D3Utils,
useValue: D3UtilsProvider.getBuilder('module1')
];
in second module
providers: [
provide: D3Utils,
useValue: D3UtilsProvider.getBuilder('module2')
];
So in line D3UtilsProvider.getBuilder('module2')
I need the instance of the D3UtilsProvider
, which needs the StringUtils
from DI. How to do this?
PS. What workarounds I have found
The first.
provide: 'd3selector', useValue: '#d3module1'
provide: 'd3selector', useValue: '#d3module1'
I don't like that it is absolutely not obvious what is d3selector.
The second.
Create two childs inherited from D3Utils
: Module1D3Utils
and Module2D3Utils
, each of them hardcode the selector in their constructors. I don't like use inheritance with DI, because each time you are editing dependencies, you need to go through the all inheritance tree.
The third.
Make getD3Utils
static. Not working, because I want to pass StringUtils
to D3UtilsProvider
with DI.
The fourth
provide: D3Utils, useValue: new D3Utils('#d3module1', new StringUtils())
This is working only for this particular case, because StringUtils currently has no dependencies.
angular dependency-injection
add a comment |
I'm using angular 7.0.1
In short, I'm interest how to get instance of the service by DI, when providing new value:providers:[{provide: D3utils, useValue: new D3Utils('selector', StringUtils)]
, where StringUtils
should be provided by DI.
3 classes are playing:
D3Utils
-constructor(selector, stringUtils)
StringUtils
D3UtilsProvider
-constructor(stringUtils)
. Has methodgetD3Utils(selector) => new D3Utils(selector, this.stringUtils)
Code of the D3Utils
and the D3UtilsBuilder
class D3Utils implements ID3Utils
constructor(private selector: string, private stringUtils: StringUtils)
export class D3UtilsProvider
constructor(private stringUtils: StringUtils)
public getD3Utils(selector: string)
return new D3Utils(selector, this.stringUtils);
The problem is that D3Utils needs StringUtils which is provided by DI and one parameter that should be passed manually. I want to write the next:
in first module
providers: [
provide: D3Utils,
useValue: D3UtilsProvider.getBuilder('module1')
];
in second module
providers: [
provide: D3Utils,
useValue: D3UtilsProvider.getBuilder('module2')
];
So in line D3UtilsProvider.getBuilder('module2')
I need the instance of the D3UtilsProvider
, which needs the StringUtils
from DI. How to do this?
PS. What workarounds I have found
The first.
provide: 'd3selector', useValue: '#d3module1'
provide: 'd3selector', useValue: '#d3module1'
I don't like that it is absolutely not obvious what is d3selector.
The second.
Create two childs inherited from D3Utils
: Module1D3Utils
and Module2D3Utils
, each of them hardcode the selector in their constructors. I don't like use inheritance with DI, because each time you are editing dependencies, you need to go through the all inheritance tree.
The third.
Make getD3Utils
static. Not working, because I want to pass StringUtils
to D3UtilsProvider
with DI.
The fourth
provide: D3Utils, useValue: new D3Utils('#d3module1', new StringUtils())
This is working only for this particular case, because StringUtils currently has no dependencies.
angular dependency-injection
I'm using angular 7.0.1
In short, I'm interest how to get instance of the service by DI, when providing new value:providers:[{provide: D3utils, useValue: new D3Utils('selector', StringUtils)]
, where StringUtils
should be provided by DI.
3 classes are playing:
D3Utils
-constructor(selector, stringUtils)
StringUtils
D3UtilsProvider
-constructor(stringUtils)
. Has methodgetD3Utils(selector) => new D3Utils(selector, this.stringUtils)
Code of the D3Utils
and the D3UtilsBuilder
class D3Utils implements ID3Utils
constructor(private selector: string, private stringUtils: StringUtils)
export class D3UtilsProvider
constructor(private stringUtils: StringUtils)
public getD3Utils(selector: string)
return new D3Utils(selector, this.stringUtils);
The problem is that D3Utils needs StringUtils which is provided by DI and one parameter that should be passed manually. I want to write the next:
in first module
providers: [
provide: D3Utils,
useValue: D3UtilsProvider.getBuilder('module1')
];
in second module
providers: [
provide: D3Utils,
useValue: D3UtilsProvider.getBuilder('module2')
];
So in line D3UtilsProvider.getBuilder('module2')
I need the instance of the D3UtilsProvider
, which needs the StringUtils
from DI. How to do this?
PS. What workarounds I have found
The first.
provide: 'd3selector', useValue: '#d3module1'
provide: 'd3selector', useValue: '#d3module1'
I don't like that it is absolutely not obvious what is d3selector.
The second.
Create two childs inherited from D3Utils
: Module1D3Utils
and Module2D3Utils
, each of them hardcode the selector in their constructors. I don't like use inheritance with DI, because each time you are editing dependencies, you need to go through the all inheritance tree.
The third.
Make getD3Utils
static. Not working, because I want to pass StringUtils
to D3UtilsProvider
with DI.
The fourth
provide: D3Utils, useValue: new D3Utils('#d3module1', new StringUtils())
This is working only for this particular case, because StringUtils currently has no dependencies.
angular dependency-injection
angular dependency-injection
edited Nov 14 '18 at 13:26
Nikita
asked Nov 14 '18 at 13:20
NikitaNikita
435823
435823
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53301213%2fhow-to-provide-instance-from-di-in-usevalue%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53301213%2fhow-to-provide-instance-from-di-in-usevalue%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown