代码部分:
1.新建一个控制台程序
2.nuget安装包和项目引用.Core
3.AbpSetting表
4.修改配置
代码:
--AppSettingProvider.cs
// AppSettingProvider.cs
using System.Collections.Generic;
using System.Linq;
using Abp.Configuration;
namespace DRMS.Configuration
{
public class AppSettingProvider : SettingProvider
{
private readonly ISettingStore _settingStore;
public AppSettingProvider(ISettingStore settingStore)
{
_settingStore = settingStore;
}
public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
{
var allSettings = _settingStore.GetAllList(null, null);
return allSettings.Select(x => new SettingDefinition(x.Name, string.Empty));
}
}
}
--IStorage.cs
//IStorage.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace DRMS.Storage
{
public interface IStorage
{
string PutObject(Stream fileStream, string fileName, out string key);
void DeleteObject(string key);
}
}
--AliyunStorage.cs
//AliyunStorage.cs
using Abp.Configuration;
using Aliyun.OSS;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace DRMS.Storage
{
public class AliyunStorage : IStorage
{
private readonly string _endpoint;
private readonly string _accessKeyId;
private readonly string _accessKeySecret;
private readonly string _bucketDomain;
private readonly string _bucketName;
public AliyunStorage(ISettingManager settingManager)
{
_endpoint = settingManager.GetSettingValue("Oss.endpoint");
_accessKeyId = settingManager.GetSettingValue("Oss.accessKeyId");
_accessKeySecret = settingManager.GetSettingValue("Oss.accessKeySecret");
_bucketName = settingManager.GetSettingValue("Oss.bucketName");
_bucketDomain = settingManager.GetSettingValue("Oss.bucketDomain");
}
public string PutObject(Stream fileStream, string fileName, out string key)
{
OssClient client = new OssClient(_endpoint, _accessKeyId, _accessKeySecret);
key = Guid.NewGuid().ToString();
int extentionIndex = fileName.LastIndexOf('.');
if (extentionIndex > 0)
{
key += $"{fileName.Substring(extentionIndex)}";
}
var result = client.PutObject(_bucketName, key, fileStream);
return $"{_bucketDomain}/{key}";
}
public void DeleteObject(string key)
{
OssClient client = new OssClient(_endpoint, _accessKeyId, _accessKeySecret);
client.DeleteObject(_bucketName, key);
}
}
}
报错:
ERROR 2020-11-18 14:02:18,349 [47 ] Mvc.ExceptionHandling.AbpExceptionFilter - ComponentActivator: could not instantiate DRMS.Storage.AliyunStorage
Castle.MicroKernel.ComponentActivator.ComponentActivatorException: ComponentActivator: could not instantiate DRMS.Storage.AliyunStorage
---> System.Exception: Could not instantiate DRMS.Storage.AliyunStorage.
---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> Abp.AbpException: There is no setting defined with name: Oss.endpoint
at Abp.Configuration.SettingDefinitionManager.GetSettingDefinition(String name)
at Abp.Configuration.SettingManager.GetSettingValueInternal(String name, Nullable`1 tenantId, Nullable`1 userId, Boolean fallbackToDefault)
at Abp.Configuration.SettingManager.GetSettingValue(String name)
at Castle.Proxies.SettingManagerProxy.GetSettingValue_callback(String name)
at Castle.Proxies.Invocations.ISettingManager_GetSettingValue.InvokeMethodOnTarget()
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.SettingManagerProxy.GetSettingValue(String name)
at DRMS.Storage.AliyunStorage..ctor(ISettingManager settingManager) in F:\DRMS\riching-drms-service\src\DRMS.Storage\AliyunStorage.cs:line 21
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture)
at Castle.Core.Internal.ReflectionUtil.Instantiate[TBase](Type subtypeofTBase, Object[] ctorArgs)
--- End of inner exception stack trace ---
at Castle.Core.Internal.ReflectionUtil.Instantiate[TBase](Type subtypeofTBase, Object[] ctorArgs)
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstanceCore(ConstructorCandidate constructor, Object[] arguments, Type implType)
--- End of inner exception stack trace ---
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstanceCore(ConstructorCandidate constructor, Object[] arguments, Type implType)
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstance(CreationContext context, ConstructorCandidate constructor, Object[] arguments)
这错误时因为AppSettingProvider.cs 没配置好