有一类:
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()的一个方法,该方法又使用DI并执行,
这里出现错误:GetInfo()FileRepository_usersRepository.Get()
System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
我的 autofac 配置:
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 容器会为你创建它们:
这里是手动创建的,把你手动创建的没有第二个参数的
ShareRepository传给它。FileRepository我怀疑你= null在构造函数的某个地方安顿下来,userRepository因此 equalsnull。需要做的是注册类型和接口的对应关系:
如果要指定
connectionString为参数,请使用WithParameter.