C# Unity (IoC) InjectionFactory durch RegisterFactory ersetzen. Wie ?

antaro

Cadet 3rd Year
Registriert
Sep. 2012
Beiträge
41
Hallo Leute,

mein (Demo)Projekt mit Unity(IoC) erzeugt ViewModels durch named Registrations. Dabei wird die InjectionFactory
verwendet. Diese soll ersetzt werden durch die neue Methode RegisterFactory<>..., da InjectionFactory obsolete ist.
Ich habe mir alle Überladungen für RegisterFactory angesehen, kann es aber auf mein Projekt nicht übertragen.

Wer kann mir helfen, InjectionFactory durch RegisterFactory zu ersetzen ? Vielen Dank!

Code:
public class ContainerBuilder
    {
        public static IUnityContainer BuildUnityContainer()
        {
            var container = new UnityContainer();
          
            container.RegisterType<IViewModel, NameViewModel>("NameVM")
                .RegisterType<IViewModel, StatusViewModel>("StatusVM")       
                .RegisterType<IViewModel, MainWindowViewModel>("MainVM")
            
                //mit InjectionFactory werden die richtigen VM's erzeugt (s. void Initialize())
                .RegisterType<Func<string, IViewModel>>(new InjectionFactory(c =>
                    new Func<string, IViewModel>(name => c.Resolve<IViewModel>(name))));

                //ersetze InjectionFactory durch RegisterFactory
                //.RegisterFactory<IViewModel>(???,???,???,null);   
            return container;
        }
    }


 public class ViewModelController
    {
        IUnityContainer container = ContainerBuilder.BuildUnityContainer();

        public ViewModelController()
        {    Initialize();  }

        void Initialize()
        {
            IViewModel statusVM = CreateViewModel("StatusVM");
            IViewModel mainVM = CreateViewModel("MainVM");
            IViewModel nameVM = CreateViewModel("NameVM");
        }


    public IViewModel CreateViewModel(string vmName)
        {    return container.Resolve<IViewModel>(vmName);   }
    }

 class Program
    {
        static void Main(string[] args)
        {
            var vmc = new ViewModelController();
            Console.ReadKey();
        }
    }
 
probier mal
Code:
// ersetze InjectionFactory durch RegisterFactory
.RegisterFactory<IViewModel>(c => new Func<string, IViewModel>(name => c.Resolve<IViewModel>(name)));
 
  • Gefällt mir
Reaktionen: antaro
Es funktioniert. Jetzt ergeben die Überladungen für mich einen Sinn.
Besten Dank !
 
Zurück
Oben