import{_ as t,r as c,o as p,c as o,b as n,d as s,e as l,a}from"./app-4f4af2d5.js";const i="/docs/hzy-admin/ioc-aop-1.jpg",u={},d=a(`

Ioc 和 Aop

提示

我们只需要对服务添加继承一个接口即可自动注入[服务将变为 ioc 对象],框架采用微软原汁原味的ioc注入,提倡构造注入。

public interface IAccountService : IScopedDependency
{
    Task<string> GetUserNameAsync();
}

框架提供了多种类型的注入接口

可以根据自己的业务需求选择不同的注入方式,但是框架封装好了,你的服务只需要继承 ApplicationService 类即可。

除非自定义一些特殊的服务,否则不需要继承其他的接口。

带有 Self 名字结尾注入服务自身,不带 Self 名字结尾代表注入接口。

`,7),r={href:"https://gitee.com/hzy6/hzy-scan-di-service/wikis/pages",target:"_blank",rel:"noopener noreferrer"},k=a(`
namespace MiaoYu.Framework.AutoRegisterIOC;

/// <summary>
/// 注册 Scoped
/// </summary>
public interface IScopedDependency { }

/// <summary>
/// 注册 Scoped 自身实现类
/// </summary>
public interface IScopedSelfDependency { }

/// <summary>
///  注册 Singleton
/// </summary>
public interface ISingletonDependency { }

/// <summary>
///  注册 Singleton 自身实现类
/// </summary>
public interface ISingletonSelfDependency { }

/// <summary>
///  注册 Transient
/// </summary>
public interface ITransientDependency { }

/// <summary>
///  注册 Transient 自身实现类
/// </summary>
public interface ITransientSelfDependency { }

Aop 拦截器

提示

通过这个注入方式,我们可以对程序做拦截器,现在系统默认有4种,可以通过继承 AopBaseAttribute 实现自定义拦截特性

定时任务

配置信息注入标记 [AppSettings(“你的json节点地址”)]

提示

针对 appsettings.json 配置信息

1、必须是属性 不能是 字段

2、属性必须是 virtual

[AppSettings("ConnectionStrings:DefaultConnection"")]
public virtual string ConnectionString { get; set; }

服务实例注入标记 [Autowired]

提示

注入不需要构造通过 Autowired 特性即可拿到服务实例

1、必须是属性 不能是 字段

2、属性必须是 virtual

public class Test : ITransientSelfDependency
{
    [Autowired]
    public virtual IAccountService _accountService { get; set; }

    public void Run()
    {
        _accountService.GetAccountContext(); // 获取当前登录人信息
        // todo ...
    }
}

`,10);function m(v,b){const e=c("ExternalLinkIcon");return p(),o("div",null,[d,n("blockquote",null,[n("p",null,[s("更多操作请看此链接:"),n("a",r,[s("https://gitee.com/hzy6/hzy-scan-di-service/wikis/pages"),l(e)])])]),k])}const y=t(u,[["render",m],["__file","ioc-aop.html.vue"]]);export{y as default};