Имеется класс:
public class FileRepository : IFileRepository
{
private readonly string _connectionString;
private readonly IUserStore _usersRepository;
public FileRepository(string connectionString, IUserStore user)
{
_connectionString = connectionString;
_usersRepository = user;
}
public void GetInfo()
{
_usersRepository.Get();
}
}
Второй класс:
public class ShareRepository : IShareRepository
{
private readonly string _connectionString;
private readonly IFileRepository _fileRepository;
public ShareRepository(string connectionString, IFileRepository
fileRepository)
{
_connectionString = connectionString;
_fileRepository = fileRepository;
}
public void GetTest()
{
_fileRepository.GetInfo()
}
}
При выполнении _fileRepository.GetInfo()
вызывается метод GetInfo()
из класса FileRepository
, который в свою очередь тоже использует DI и выполняет
_usersRepository.Get()
и здесь возникает ошибка:
System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
Мой Autofac config:
var connectionString = "......."
builder.Register(ctx => new FileRepository(connectionString, new
UserRepository(connectionString)))
.As<IFileRepository>();
builder.Register(ctx => new ShareRepository(connectionString,
new FileRepository(connectionString))).As<IShareRepository>();
Дополнение:
builder.RegisterType<UserRepository>().As<IUserStore>.InstancePerRequest()
Лучше, если не вы будете создавать объекты вручную, а DI-контейнер будет создавать их за вас:
builder.Register(ctx => new ShareRepository(connectionString,
new FileRepository(connectionString))).As<IShareRepository>();
Вот здесь вы создали ShareRepository
вручную и ему передали вручную же созданный вами FileRepository
без второго параметра. Подозреваю, у вас там = null
примостилось где-то в конструкторе, поэтому userRepository
и равен null
.
Что нужно сделать — зарегистрировать соответствие типов и интерфейсов:
builder.RegisterType<FileRepositorty>()
.As<IFileRepository>();
builder.RegisterType<ShareRepository>()
.As<IShareRepository>();
Если хотите указать connectionString
в качестве параметра, используйте методWithParameter
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как обрабатывать ботом сообщения, которые будут приходить, только тогдда, когда я запущу программу? Сейчас у меня так как на скрине, и когда...
Привет всемКак можно измерить ширину\высоту Document-а RichTextBox-a если в нем разные размеры шрифта