Archive

Posts Tagged ‘WPF’

[C#] Konfiguracja Unity i XamlParseException

26 marca 2012 2 komentarze

Niedawno pierwszy raz użyłem microsoftowego kontenera Unity do wstrzykiwania zależności w mojej aplikacji WPF opartej o wzorzec MVVM.  Zagadnienie dependency injection przystępnie przybliżył mi cykl artykułów na xoft.pl , a samo Unity zostało bardzo zrozumiale opisane na mtaulty.com . Bez  problemów napisałem kod, który w codebehind widoku tworzy kontener, rejestruje potrzebne implementacje interfejsów używanych w ViewModelu i ustawia DataContext na uzyskany z kontenera obiekt ViewModel.

IUnityContainer uc = new UnityContainer();
uc.RegisterType(typeof(IMojTyp1), typeof(MojTyp1));
uc.RegisterType(typeof(IMojTyp2), typeof(MojTyp2));
uc.RegisterType(typeof(IMojTyp3), typeof(MojTyp3));
uc.RegisterType(typeof(IMojTyp4), typeof(MojTyp4));
this.DataContext = uc.Resolve<MainViewModel>();

Następnie postanowiłem przenieść rejestrację typów do pliku konfiguracyjnego App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <container>
      <register type="MojNamespace.IMojTyp1, MojAssembly"
                mapTo="MojNamespace.MojTyp1, MojAssembly"/>
      <register type="MojNamespace.IMojTyp2, MojAssembly"
            mapTo="MojNamespace.MojTyp2, MojAssembly"/>
      <register type="MojNamespace.IMojTyp3, MojAssembly"
            mapTo="MojNamespace.MojTyp3, MojAssembly"/>
      <register type="MojNamespace.IMojTyp4, MojAssembly"
            mapTo="MojNamespace.MojTyp4, MojAssembly"/>
    </container>
  </unity>
</configuration>

Teoretycznie wiedziałem jak to zrobić , ale praktyka okazała się jak zwykle bezlitosna: zażądała ofiary z czasu i ukorzenia się przed bezwzględnymi Exceptionami. Nie chciałem się poddać.  Zaatakowany przez drapieżne wyjątki użyłem najbardziej śmiercionośnej broni w całym IT, czyli google.

Czytaj dalej…

Kategorie:Przykłady Tagi: , , , ,