Autofac. Как использовать собственный метод (свойство) для разрешения некоторого интерфейса?

У меня есть следующие интерфейсы:

public interface IConfigurationProvider<TSettings> where TSettings : ISettings, new() 
{
       TSettings Settings { get; }
}
public interface ISettings
{
}

У меня есть следующая реализация IConfigurationProvider:

public class ConfigurationProvider<TSettings> : IConfigurationProvider<TSettings> where 

    TSettings : ISettings, new()
        {
            public ConfigurationProvider() 
            {
                this.BuildConfiguration();
            }

            public TSettings Settings { get; private set; }

            private void BuildConfiguration() 
            {
                this.Settings = new TSettings();
                //...load and assign properties to 'this.Settings'
                //...skipped
                // now 'Settings' property contains configured 'ISettings' instance
            }
        }

У меня также могут быть отдельные классы, реализующие интерфейс ISettings. Например,

public class UserSettings : ISettings
    {
        public int SomeProperty1 { get; set; }
        public int SomeProperty2 { get; set; }
    }


public class CatalogSettings : ISettings
    {
        public int SomeProperty3 { get; set; }
        public int SomeProperty4 { get; set; }
    }

Я использую следующий код для настройки 'ContainerBuilder': builder.RegisterGeneric (typeof (ConfigurationProvider <>)). As (typeof (IConfigurationProvider <>));

Он отлично работает . А для получения «UserSettings» я использую следующий код:

var userSettingsProvider = builder.Resolve<IConfigurationProvider<UserSettings>>();
var userSettings = userSettingsProvider.Settings;

Вопрос: как мне настроить «ContainerBuilder», чтобы я мог разрешить определенные «ISettings» следующим образом:

var userSettings = builder.Resolve<UserSettings>();

Возможно ли это с помощью Autofac?

Заранее спасибо

8
задан Andrei M 31 January 2011 в 14:05
поделиться