Unity constructor injection with MVVM not working as expected
I have one scenario where i want to create object of my injection when i do login but i am bit unaware about cycle my service module where my dependency injection mapping defined is called after my LoginViewModel calls.
due to this my _Service
object is initially null because ConfigureModuleCatalog
calls after my LoginViewModel
calls.
How can i correct this..actually i don't want to use new Service()
if my object is null
.
I am using below code for this
LoginViewModel
private readonly IService _Service;
public LoginViewModel(IService Service=null) //Also i want to make this innjection optional so i set it to NULL
{
_Service = Service;
}
private void MethodWhereIWantToUseService()
{
//_service is coming NULL because configuration or mapping of injection calls after this
_Service.MYMethod();
}
ServiceModule
public class ServicesModule : IModule
{
public void Initialize()
{
var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
container.RegisterType<IService, Service>();
}
}
Bootstrapper i.e. where my module is configured
public class Bootstrapper : UnityBootstrapper
{
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog catalog = (ModuleCatalog)this.ModuleCatalog;
catalog.AddModule(typeof(ServicesModule));
}
}
c# asp.net wpf mvvm unity-container
add a comment |
I have one scenario where i want to create object of my injection when i do login but i am bit unaware about cycle my service module where my dependency injection mapping defined is called after my LoginViewModel calls.
due to this my _Service
object is initially null because ConfigureModuleCatalog
calls after my LoginViewModel
calls.
How can i correct this..actually i don't want to use new Service()
if my object is null
.
I am using below code for this
LoginViewModel
private readonly IService _Service;
public LoginViewModel(IService Service=null) //Also i want to make this innjection optional so i set it to NULL
{
_Service = Service;
}
private void MethodWhereIWantToUseService()
{
//_service is coming NULL because configuration or mapping of injection calls after this
_Service.MYMethod();
}
ServiceModule
public class ServicesModule : IModule
{
public void Initialize()
{
var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
container.RegisterType<IService, Service>();
}
}
Bootstrapper i.e. where my module is configured
public class Bootstrapper : UnityBootstrapper
{
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog catalog = (ModuleCatalog)this.ModuleCatalog;
catalog.AddModule(typeof(ServicesModule));
}
}
c# asp.net wpf mvvm unity-container
Where do you call your bootstrapper?
– grek40
Nov 16 '18 at 6:35
@grek40 when i do login i call bootstraper.run i.e. in App.xaml.cs "onstartup"
– mswebappdev
Nov 16 '18 at 6:43
How do you create yourLoginViewModel
?
– grek40
Nov 16 '18 at 7:11
add a comment |
I have one scenario where i want to create object of my injection when i do login but i am bit unaware about cycle my service module where my dependency injection mapping defined is called after my LoginViewModel calls.
due to this my _Service
object is initially null because ConfigureModuleCatalog
calls after my LoginViewModel
calls.
How can i correct this..actually i don't want to use new Service()
if my object is null
.
I am using below code for this
LoginViewModel
private readonly IService _Service;
public LoginViewModel(IService Service=null) //Also i want to make this innjection optional so i set it to NULL
{
_Service = Service;
}
private void MethodWhereIWantToUseService()
{
//_service is coming NULL because configuration or mapping of injection calls after this
_Service.MYMethod();
}
ServiceModule
public class ServicesModule : IModule
{
public void Initialize()
{
var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
container.RegisterType<IService, Service>();
}
}
Bootstrapper i.e. where my module is configured
public class Bootstrapper : UnityBootstrapper
{
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog catalog = (ModuleCatalog)this.ModuleCatalog;
catalog.AddModule(typeof(ServicesModule));
}
}
c# asp.net wpf mvvm unity-container
I have one scenario where i want to create object of my injection when i do login but i am bit unaware about cycle my service module where my dependency injection mapping defined is called after my LoginViewModel calls.
due to this my _Service
object is initially null because ConfigureModuleCatalog
calls after my LoginViewModel
calls.
How can i correct this..actually i don't want to use new Service()
if my object is null
.
I am using below code for this
LoginViewModel
private readonly IService _Service;
public LoginViewModel(IService Service=null) //Also i want to make this innjection optional so i set it to NULL
{
_Service = Service;
}
private void MethodWhereIWantToUseService()
{
//_service is coming NULL because configuration or mapping of injection calls after this
_Service.MYMethod();
}
ServiceModule
public class ServicesModule : IModule
{
public void Initialize()
{
var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
container.RegisterType<IService, Service>();
}
}
Bootstrapper i.e. where my module is configured
public class Bootstrapper : UnityBootstrapper
{
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog catalog = (ModuleCatalog)this.ModuleCatalog;
catalog.AddModule(typeof(ServicesModule));
}
}
c# asp.net wpf mvvm unity-container
c# asp.net wpf mvvm unity-container
edited Nov 16 '18 at 6:28
FCin
2,65621128
2,65621128
asked Nov 16 '18 at 6:17
mswebappdevmswebappdev
164
164
Where do you call your bootstrapper?
– grek40
Nov 16 '18 at 6:35
@grek40 when i do login i call bootstraper.run i.e. in App.xaml.cs "onstartup"
– mswebappdev
Nov 16 '18 at 6:43
How do you create yourLoginViewModel
?
– grek40
Nov 16 '18 at 7:11
add a comment |
Where do you call your bootstrapper?
– grek40
Nov 16 '18 at 6:35
@grek40 when i do login i call bootstraper.run i.e. in App.xaml.cs "onstartup"
– mswebappdev
Nov 16 '18 at 6:43
How do you create yourLoginViewModel
?
– grek40
Nov 16 '18 at 7:11
Where do you call your bootstrapper?
– grek40
Nov 16 '18 at 6:35
Where do you call your bootstrapper?
– grek40
Nov 16 '18 at 6:35
@grek40 when i do login i call bootstraper.run i.e. in App.xaml.cs "onstartup"
– mswebappdev
Nov 16 '18 at 6:43
@grek40 when i do login i call bootstraper.run i.e. in App.xaml.cs "onstartup"
– mswebappdev
Nov 16 '18 at 6:43
How do you create your
LoginViewModel
?– grek40
Nov 16 '18 at 7:11
How do you create your
LoginViewModel
?– grek40
Nov 16 '18 at 7:11
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%2f53332440%2funity-constructor-injection-with-mvvm-not-working-as-expected%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%2f53332440%2funity-constructor-injection-with-mvvm-not-working-as-expected%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
Where do you call your bootstrapper?
– grek40
Nov 16 '18 at 6:35
@grek40 when i do login i call bootstraper.run i.e. in App.xaml.cs "onstartup"
– mswebappdev
Nov 16 '18 at 6:43
How do you create your
LoginViewModel
?– grek40
Nov 16 '18 at 7:11