Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191

    [ASP.NET MVC] Unity Dependency Errore risoluzione dipendenze

    Utilizzo Unity.Mvc per la risoluzione delle dipendenze e tutto funziona correttamente ...

    Il problema si pone quando cerco di risolvere una dipendenza che contiene nel costruttore un'altra dipendenza da risolvere...

    Esempio:

    registro la dipendenza:

    codice:
                _container.RegisterType<IAccountService, AccountService>();
                _container.RegisterType<IInstallationService, InstallationService>();
    la classe InstallationService:
    codice:
        public partial class InstallationService : IInstallationService
        {
            private readonly IAccountService _accountService;
    
    
            public InstallationService(IAccountService accountService)
            {
                this._accountService = accountService;
            }
         }
    quando provo a risolvere la dipendenza con:
    codice:
        DependencyResolver.Current.GetService<IInstallationService>();
    Mi restituisce l'errore:
    codice HTML:
    The type HttpContextBase does not have an accessible constructor

    Mentre se nella classe InstallationService provo a togliere il parametro IAccountService dal costruttore la dipendenza viene risolta correttamente ...

    Sbaglio qualcosa durante la registrazione???

    Grazie in anticipo,
    EnSa

  2. #2
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    up...

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    1) Mostra qualche parte di codice in più
    2) MAI risolvere le dipendenze in quel modo.
    codice:
    [DependencyResolver.Current.GetService<IInstallationService>();
    Stai facendo ServiceLocation (antipattern)
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    questa è la classe per la registrazione di DI

    codice:
    public static class DependencyRegistrar    {
            public static UnityContainer _container;
    
    
            public static void Initialise()
            {
                var container = BuildUnityContainer();
    
    
                DependencyResolver.SetResolver(new UnityDependencyResolver(container));
            }
    
    
            private static IUnityContainer BuildUnityContainer()
            {
                if (_container == null)
                    _container = new UnityContainer();
    
    
                // register all your components with the container here
                // it is NOT necessary to register your controllers
    
    
                // e.g. container.RegisterType<ITestService, TestService>();
    
    
                _container.RegisterType<IDbContext, DbObjectContext>();
    
    
                _container.RegisterType<IAccountService, AccountService>();
                _container.RegisterType<IInstallationService, InstallationService>();
    
    
                return _container;
            }
        }
    mentre per risolverlo dal controller InstallController utilizzavo:

    codice:
            private readonly IInstallationService _installationService;
    
    
            public InstallController(IInstallationService installationService)
            {
                this._installationService = installationService;
            }
    il codice che ho messo sopra è la prova che ho fatto perchè anche in questo modo mi restituisce errore ...

    In pratica non riesce a risolvere le dipendenze che contengono altre dipendenze ...

  5. #5
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    up...

  6. #6
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    Risolto aggiungendo:

    codice:
        _container.RegisterType<HttpContextBase>(new InjectionFactory(c =>
                {
                    return new HttpContextWrapper(HttpContext.Current);
                }));
    Grazie mille
    EnSa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.