Автоактивная синглтонная инициализация
У меня есть интерфейс и класс, как это:
public sealed class UserService : IUserService
{
private readonly ILifetimeScope container;
public UserService()
{
this.container = this.ConfigureBuilder(new ContainerBuilder()).Build();
}
private ContainerBuilder ConfigureBuilder(ContainerBuilder builder)
{
builder.RegisterType<UserConfiguration>()
.AsImplementedInterfaces();
builder.Register(c => this.GetCredentialHelperAsync(c))
.As<ICredentialProvider>()
.SingleInstance();
return builder;
}
private async Task<CredentialProvider> GetCredentialHelperAsync(IComponentContext componentContext)
{
//This seems to causing problem as I think I cannot access component when I am build.
var config = componentContext.Resolve<UserConfiguration>();
if (config.User == null)
{
//ADD the user and set credentials
}
var userCredentials = new List<IUserCredential>();
return new UserCredentialProvider(userCredentials)
}
}
Когда я использую autofac и хочу зарегистрировать этот класс как синглтон, как мне это сделать. Проблема в том, что значение учетных данных пользователя определяется после чтения учетных данных из файла во время выполнения.
С помощью приведенного выше кода я получаю исключение при сборке UserCredentialProvider, так как я думаю, что мы не можем получить доступ к объектам во время сборки. Есть ли выход?