Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8850101
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 14, 20262026-06-14T12:49:18+00:00 2026-06-14T12:49:18+00:00

Is it a bad practice to use IoC container inside Factory Pattern? for example:

  • 0

Is it a bad practice to use IoC container inside Factory Pattern? for example:

public interface IDialogService
{
    void RegisterView<TView, TViewModel>(string viewName) 
        where TViewModel : IDialogViewModel
        where TView : Window;

    bool? ShowDialog(string viewName, IDialogViewModel viewModel);
    // factory method:
    TViewModel CreateDialogViewModel<TViewModel>(string name) where TViewModel : IDialogViewModel;
}

public class DialogService : IDialogService
{
    private readonly IUnityContainer _container;
    public DialogService(IUnityContainer container)
    {
        _container = container;
    }

    #region IDialogService Members

    public void RegisterView<TView, TViewModel>()
        where TView : Window
        where TViewModel : IDialogViewModel
    {
        RegisterView<TView, TViewModel>("");
    }

    public void RegisterView<TView, TViewModel>(string viewName)
        where TView : Window
        where TViewModel : IDialogViewModel
    {
        if (!_container.IsRegistered<TViewModel>())
            _container.RegisterType<TViewModel>();

        if (string.IsNullOrEmpty(viewName))
        {
            viewName = typeof(TView).Name;
        }
        _container.RegisterType<Window, TView>(viewName);
    }

    public bool? ShowDialog(string viewName, IDialogViewModel viewModel)
    {
        var view = _container.Resolve<Window>(viewName);
        view.DataContext = viewModel;
        view.Owner = Application.Current.MainWindow;
        return view.ShowDialog();
    }
    // factory method:
    public TViewModel CreateDialogViewModel<TViewModel>(string name) where TViewModel : IDialogViewModel
    {
        return _container.Resolve<TViewModel>(name);
    }

    #endregion
}

The reason that I created a Factory Method is bacause some of my IDialogViewModel implementations have a lots of parameters in their constructor and also, each dialog must have new UnitOfWork when instantiating.

Here is how I use it:

public class PeopleMainViewModel : NotificationObject, ...
{
    private readonly IDialogService _dialogService = null;
    public PeopleMainViewModel(IDialogService dialogService)
    {
        _dialogService = dialogService;
    }

    // this method executes by a command.
    public void AddPerson()
    {
        // here is factory method usage. each time PersonDialogViewModel instantiates, a new Unit of work will be created.
        var viewModel = _dialogService.CreateDialogViewModel<PersonDialogViewModel>();

        // this shows person dialog window to user...
        var result = _dialogService.ShowDialog("PersonWindow", viewModel);
        if(result == true)
        {
            //...
        }
    }
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-14T12:49:19+00:00Added an answer on June 14, 2026 at 12:49 pm

    You you should try to avoid injecting the IoC container into a factory, instead look at if your IoC framework can generate the factory for you. However that is not always possible, in those cases I think it is acceptable to use the container in a factory, as long as it never escapes.

    Personally I would not put the container in a Service (as is the case above) as it feels to me like the class now has two responsibilities and the injection framework has escaped out into application logic.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Is it a bad practice or code smell to use an IoC container while
Is it bad practice use try-catch like goto? For example, simple code try{ if(argc<2){
Is it generally considered a bad practice to use non-exhaustive pattern machings in functional
Is it bad practice to use the instanceof operator in the following context? public
I know it is bad practice to use equality instead of equivalence when sorting
1) Isn't it a bad practice to use these attributes on all of my
In an MVC3 application, is it considered bad practice to use a try catch
Is it bad practice to use a default name (e.g. my-product-name) for a Hazelcast
Is it a bad practice to use domain objects in Sets or as keys
Is there any layer where it is bad practice to use DI? In a

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.