2012-06-01 13 views
5

chciałbym, aby móc załadować następujących do Jedności:Unity obciążenia mapowania z pliku XML

UnityContainer.RegisterType<ClientRegistrationVM, ClientRegistrationVMDesign>(); 

ładując go za pomocą pliku XML.

Oto kod psudo tego, co chciałbym mieć.

FileStream unityMappings = new FileStream(@".\UnityMappings.xml", FileMode.Open) 
UnityContainer.CreateFromXML(unityMappings); 
unityMappings.Dispose(); 

a plik UnityMappings.xml zawierałby mapowania i bibliotek DLL, że typy w.

co chcę nawet możliwe z Unity? Czy ktoś to wcześniej zrobił?

+2

@SebastianWeber - ja „słyszał o Google” (trochę obraźliwe tam ton). Zrobiłem to Google. Po prostu nie znałem właściwej frazy. Postaraj się google "jedność ioc z pliku" Jedynym trafnym trafieniem, które otrzymasz, jest moje pytanie (którego oczywiście nie było, gdy go szukałem). – Vaccano

+0

[This] (http://geekswithblogs.net/Sharpoverride/archive/2009/08/20/ioc-containers-in-.net-part-6-unity-container.aspx) to piąty wynik na pierwszej stronie listy wyników Google przy użyciu wyszukiwanych haseł. Ponieważ pokazuje przykładową konfigurację Unity przy użyciu XML, uważam to za odpowiedni wynik. –

+0

@SebastianWeber - Nie widziałem tego. Ale mimo to używa App.Config. Potrzebowałem wolnego pliku xml (zgodnie z nemesv). – Vaccano

Odpowiedz

8

Możesz użyć konfiguracji XML z Unity, możesz nawet miksować konfigurację czasu projektowania (XML) i konfiguracji czasu wykonywania (kodowania).

Jednak Design-Time Configuration używa UnityConfigurationSection, a ładowanie konfiguracji jest obsługiwane tylko przez to, więc musisz wykonać trochę więcej pracy, jeśli chcesz mieć konfigurację w innym pliku (np. Nie app.config lub web.config).

szczęście można znaleźć w dokumentacji próbki pod: Loading the Configuration from Alternative Files odcinku:

using System.Configuration; 

var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = "unity.config" }; 

Configuration configuration = 
    ConfigurationManager.OpenMappedExeConfiguration(fileMap,     
                ConfigurationUserLevel.None); 

var unitySection = (UnityConfigurationSection)configuration.GetSection("unity"); 

var container = new UnityContainer().LoadConfiguration(unitySection);