Używanie Unity do wstrzykiwania obiektów do instancji IValueConverter
Mam projekt IValueConverter w projekcie Silverlight 5, który konwertuje dane niestandardowe na różne kolory. Muszę odczytać rzeczywiste wartości kolorów z bazy danych (ponieważ mogą być edytowane przez użytkownika).
Ponieważ Silverlight używa asynchronicznych wywołań do ładowania danych przez Entity Framework z bazy danych, stworzyłem proste repozytorium, które przechowuje wartości z db.
Interfejs:
<code>public interface IConfigurationsRepository { string this[string key] { get; } } </code>
Implementacja:
<code>public class ConfigurationRepository : IConfigurationsRepository { private readonly TdTerminalService _service = new TdTerminalService(); public ConfigurationRepository() { ConfigurationParameters = new Dictionary<string, string>(); _service.LoadConfigurations().Completed += (s, e) => { var loadOperation = (LoadOperation<Configuration>) s; foreach (Configuration configuration in loadOperation.Entities) { ConfigurationParameters[configuration.ParameterKey] = configuration.ParameterValue; } }; } private IDictionary<string, string> ConfigurationParameters { get; set; } public string this[string key] { get { return ConfigurationParameters[key]; } } } </code>
Teraz chciałbym użyć Unity do wstrzyknięcia tej instancji mojego repozytorium do instancji IValueConverter ...
App.xaml.cs:
<code>private void RegisterTypes() { _container = new UnityContainer(); IConfigurationsRepository configurationsRepository = new ConfigurationRepository(); _container.RegisterInstance<IConfigurationsRepository>(configurationsRepository); } </code>
IValueConverter:
<code>public class SomeValueToBrushConverter : IValueConverter { [Dependency] private ConfigurationRepository ConfigurationRepository { get; set; } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { switch ((SomeValue)value) { case SomeValue.Occupied: return new SolidColorBrush(ConfigurationRepository[OccupiedColor]); default: throw new ArgumentException(); } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } </code>
Problem polega na tym, że nie dostaję tego samego Unity-Containera w instancji konwertera (tj. Repozytorium nie jest zarejestrowane).