聚合异常 Asp.Net Core 5.0
Aggregate Exception Asp.Net Core 5.0
我有一个基于 Asp.Net Core 5.0 的 Mvc 项目。我有自己的 Core Layer
并且我有自己的照片、视频上传器方法,该方法基于我的 FileRepo
class。
这是我的 FileModel
class:
public class FileModel
{
public int FileID { get; set; }
public string FileName { get; set; }
public string FileType { get; set; }
public string FileExtension { get; set; }
public string FileSlug { get; set; }
public string FilePath { get; set; }
public byte[] Data { get; set; }
}
这是我的文件上传方法:
public interface IFileUploader
{
Task<FileModel> FileUploadToDatabase(List<IFormFile> files);
Task<FileModel> FileUploadToPath(List<IFormFile> files);
Task<bool> FileDeleteFromPath(int id);
}
public class FileUploader : IFileUploader
{
private FileModel _fileModel;
public FileUploader(FileModel fileModel)
{
_fileModel = fileModel;
}
public async Task<FileModel> FileUploadToDatabase(List<IFormFile> files)
{
foreach (var file in files)
{
var fileName = Path.GetFileNameWithoutExtension(file.FileName);
var extension = Path.GetExtension(file.FileName);
_fileModel = new FileModel
{
FileName = fileName,
FileType = file.ContentType
};
using (var dataStream = new MemoryStream())
{
await file.CopyToAsync(dataStream);
_fileModel.Data = dataStream.ToArray();
}
}
return _fileModel;
}
public async Task<FileModel> FileUploadToPath(List<IFormFile> files)
{
foreach (var file in files)
{
var basePath = Path.Combine(Directory.GetCurrentDirectory() + "\Files\");
bool basePathExists = Directory.Exists(basePath);
if (!basePathExists) Directory.CreateDirectory(basePath);
var fileName = Path.GetFileNameWithoutExtension(file.FileName);
var filePath = Path.Combine(basePath, file.FileName);
var extension = Path.GetExtension(file.FileName);
if (!File.Exists(filePath))
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
_fileModel = new FileModel
{
FileName = fileName,
FileType = file.ContentType,
FilePath = filePath
};
}
}
return _fileModel;
}
}
如你们所见,它是一个不同的层,与我的 Mvc 项目没有任何关系。
当我将这些扩展添加到我的 Mvc 项目时出现错误。
错误告诉我:
'Some services are not able to be constructed (Error while validating the service descriptor
'ServiceType: CORE_HBKSOFTWARE.Interfaces.IFileUploader Lifetime: Singleton ImplementationType:
CORE_HBKSOFTWARE.Classes.FileUploader': Unable to resolve service for type
'CORE_HBKSOFTWARE.Models.FileModel' while attempting to activate
'CORE_HBKSOFTWARE.Classes.FileUploader'.)'
我不知道为什么我会收到那个错误。 FileModel
class 对我来说似乎没问题,但我仍然不知道。我已经将我的 services.AddSingleton<IFileUploader, FileUploader>();
添加到我的 Startup.cs
.
感谢任何建议!
如果您想使用构造函数注入在您的 FileUploader class 中创建 FileModel 实例,您需要将其注册到 IoC 容器。您可以通过在 ConfigureServices 方法中调用以下方法来做到这一点:
services.AddSingleton<FileModel>();
您还可以通过调用 AddScoped 或 AddTransient 选择不同的生命周期。
我有一个基于 Asp.Net Core 5.0 的 Mvc 项目。我有自己的 Core Layer
并且我有自己的照片、视频上传器方法,该方法基于我的 FileRepo
class。
这是我的 FileModel
class:
public class FileModel
{
public int FileID { get; set; }
public string FileName { get; set; }
public string FileType { get; set; }
public string FileExtension { get; set; }
public string FileSlug { get; set; }
public string FilePath { get; set; }
public byte[] Data { get; set; }
}
这是我的文件上传方法:
public interface IFileUploader
{
Task<FileModel> FileUploadToDatabase(List<IFormFile> files);
Task<FileModel> FileUploadToPath(List<IFormFile> files);
Task<bool> FileDeleteFromPath(int id);
}
public class FileUploader : IFileUploader
{
private FileModel _fileModel;
public FileUploader(FileModel fileModel)
{
_fileModel = fileModel;
}
public async Task<FileModel> FileUploadToDatabase(List<IFormFile> files)
{
foreach (var file in files)
{
var fileName = Path.GetFileNameWithoutExtension(file.FileName);
var extension = Path.GetExtension(file.FileName);
_fileModel = new FileModel
{
FileName = fileName,
FileType = file.ContentType
};
using (var dataStream = new MemoryStream())
{
await file.CopyToAsync(dataStream);
_fileModel.Data = dataStream.ToArray();
}
}
return _fileModel;
}
public async Task<FileModel> FileUploadToPath(List<IFormFile> files)
{
foreach (var file in files)
{
var basePath = Path.Combine(Directory.GetCurrentDirectory() + "\Files\");
bool basePathExists = Directory.Exists(basePath);
if (!basePathExists) Directory.CreateDirectory(basePath);
var fileName = Path.GetFileNameWithoutExtension(file.FileName);
var filePath = Path.Combine(basePath, file.FileName);
var extension = Path.GetExtension(file.FileName);
if (!File.Exists(filePath))
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
_fileModel = new FileModel
{
FileName = fileName,
FileType = file.ContentType,
FilePath = filePath
};
}
}
return _fileModel;
}
}
如你们所见,它是一个不同的层,与我的 Mvc 项目没有任何关系。 当我将这些扩展添加到我的 Mvc 项目时出现错误。 错误告诉我:
'Some services are not able to be constructed (Error while validating the service descriptor
'ServiceType: CORE_HBKSOFTWARE.Interfaces.IFileUploader Lifetime: Singleton ImplementationType:
CORE_HBKSOFTWARE.Classes.FileUploader': Unable to resolve service for type
'CORE_HBKSOFTWARE.Models.FileModel' while attempting to activate
'CORE_HBKSOFTWARE.Classes.FileUploader'.)'
我不知道为什么我会收到那个错误。 FileModel
class 对我来说似乎没问题,但我仍然不知道。我已经将我的 services.AddSingleton<IFileUploader, FileUploader>();
添加到我的 Startup.cs
.
感谢任何建议!
如果您想使用构造函数注入在您的 FileUploader class 中创建 FileModel 实例,您需要将其注册到 IoC 容器。您可以通过在 ConfigureServices 方法中调用以下方法来做到这一点:
services.AddSingleton<FileModel>();
您还可以通过调用 AddScoped 或 AddTransient 选择不同的生命周期。