Использование Unity для внедрения объектов в экземпляр IValueConverter

У меня есть экземпляр IValueConverter в проекте Silverlight 5, который преобразует пользовательские данные в разные цвета. Мне нужно прочитать фактические значения цвета из базы данных (, так как они могут быть отредактированы пользователем ).

Поскольку Silverlight использует асинхронные вызовы для загрузки данных через Entity Framework из базы данных, я создал простой репозиторий, в котором хранятся значения из файла db.

Интерфейс:

public interface IConfigurationsRepository
{
    string this[string key] { get; }
}

Реализация:

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];
        }
    }
}

Теперь я хотел бы использовать Unity для внедрения этого экземпляра моего репозитория в экземпляр IValueConverter...

App.xaml.cs:

private void RegisterTypes()
{
    _container = new UnityContainer();
    IConfigurationsRepository configurationsRepository = new ConfigurationRepository();
    _container.RegisterInstance<IConfigurationsRepository>(configurationsRepository);
}

IValueConverter:

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();
    }
}

проблема в том, что я не получаю тот же контейнер Unity -в экземпляре преобразователя (, т.е. репозиторий не зарегистрирован ).

6
задан froeschli 23 April 2012 в 09:36
поделиться