# 依赖注入
# 安装 SmartSql.DIExtension
Install-Package SmartSql.DIExtension
# Demo
services
.AddSmartSql((builder) =>
{
builder.UseProperties(Configuration);
})
.AddRepositoryFromAssembly(options =>
{
options.AssemblyString = "{Repository-AssemblyString}";
});
# 自定义实例别名
services
.AddSmartSql((builder) =>
{
builder.UseAlias("SmartSql");
})
# 导入外部配置
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionString": "Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True;MultipleActiveResultSets=true"
}
builder.UseProperties(Configuration);
<Database>
<DbProvider Name="SqlServer"/>
<Write Name="WriteDB" ConnectionString="${ConnectionString}"/>
</Database>
# 自定义配置文件
services
.AddSmartSql((builder) =>
{
builder.UseXmlConfig(ResourceType.File, "{XmlConfigPath}");
})
ResourceType 支持多种资源类型:
- File (本地文件)
- Embedded (嵌入式文件)
- Uri (网络文件)
# 直接使用 UseDataSource 不依赖任何配置文件
services
.AddSmartSql((builder) =>
{
builder.UseDataSource("SqlServer","{ConnectionString}");
})
# 注入动态仓储
# AssemblyAutoRegisterOptions
public class AssemblyAutoRegisterOptions
{
/// <summary>
/// 实例别名
/// </summary>
public String SmartSqlAlias { get; set; }
/// <summary>
/// 仓储接口程序集
/// </summary>
public string AssemblyString { get; set; }
/// <summary>
/// Scope模板
/// 默认:I{Scope}Repository
/// </summary>
public string ScopeTemplate { get; set; }
/// <summary>
/// 仓储接口筛选器
/// </summary>
public Func<Type, bool> Filter { get; set; }
public void UseTypeFilter<T>()
{
Filter = (type) => typeof(T).IsAssignableFrom(type);
}
}
AddRepositoryFromAssembly 默认会遍历仓储接口程序集下的所有接口,并执行动态生成后注入依赖。
services
.AddSmartSql()
.AddRepositoryFromAssembly(options =>
{
options.AssemblyString = "{Repository-AssemblyString}";
});
# 自定义 Scope 命名规范
如果你的接口命名规范为 IUserDataAccess ,可使用以下方式来从命名中提取Scope。
services
.AddSmartSql()
.AddRepositoryFromAssembly(options =>
{
options.AssemblyString = "{Repository-AssemblyString}";
options.ScopeTemplate= "I{Scope}DataAccess";
});
# 自定义筛选器
筛选 {Repository-AssemblyString} 下,Namespace 为 SmartSql.Sample.AspNetCore.DyRepositories 的仓储接口。
services
.AddSmartSql()
.AddRepositoryFromAssembly(o =>
{
options.AssemblyString = "{Repository-AssemblyString}";
o.Filter = (type) => type.Namespace == "SmartSql.Sample.AspNetCore.DyRepositories";
});