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).

questionAnswers(2)

yourAnswerToTheQuestion