Skip to content

zh_CN_OpenFx_Extension_Attributes

Shunhong Zhang edited this page Nov 30, 2018 · 2 revisions

特性是什么?

当你问出这个问题时,代表你需要补课了,这是C#基础知识

秋之盒拓展模块中特性的作用?

用于标明拓展模块的信息 或是提供实例创建前的检测用切面

信息标记特性

ExtName

显然,这个特性是被用来标记拓展模块名称的

//秋之盒将认为该拓展模块的中文名为:示例模块
[ExtName("示例模块")]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtAuth

显然,这个特性是被用来标记拓展模块所有者的

//现在,这个模块是我的了!
[ExtAuth("zsh2401")]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtDesc

显然,这个特性的内容是拓展模块的说明

[ExtDesc("哈哈哈")]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtVersion

表明拓展模块版本

[ExtVersion(1,0,0)]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtRequiredDeviceStates

标明拓展该拓展模块的运行需要什么样的设备状态

//当连接设备处于开机或恢复模式时,该模块都可以使用
[ExtRequiredDeviceStates(
    DeviceState.Poweron | DeviceState.Recovery)]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtMinApi

指定拓展模块运行所需的最低秋之盒API版本

//假设运行环境的API是7,那么该模块将不会被显示与调用
[ExtMinApi(8)]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtTargetApi

指定拓展模块开发时的目标API,请填写你所用SDK的大版本号
如果运行环境低于目标API,可能导致一些严重的崩溃,请做兼容处理

[ExtTargetApi(8)]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtIcon

设置图标,必须是程序集内嵌资源(将图片文件拖到程序集内,属性设置为嵌入的资源)
图片尽量不要超过64*64

//图片资源的路径
//如果在文件夹内,如Image文件夹,则设置为Image.icon.png(用点而不是文件夹分隔符)
[ExtIcon("icon.png")]
public class ExampleExt : AutumnBoxExtension{
...
}

创建时切面

任何一个继承自ClassExtensionBase的模块,都将会在其构造方法中获取其类的Attribte,并从中过滤出BeforeCreatingAspect的实现类并执行其BeforeCreating()方法,如果在此方法中,创建进程被要求停止,那么将不会创建此拓展模块的实例

ExtRunAsAdmin

你这个拓展模块需要管理员权限?加上这个标记吧,秋之盒将确保你的模块被使用时已经处于管理员模式

//当连接设备处于开机或恢复模式时,该模块都可以使用
[RunAsAdmin]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtRequiredRoot

如果目标设备没有ROOT权限,那么将会对用户进行提示,并阻止创建实例

//没ROOT别想用
[ExtRequiredRoot]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtMinAndroidVersion

我想聪明的你已经看出来了,这个模块将检测设备的安卓版本并作出提示与警告

//必须安卓8.0以上
[ExtMinAndroidVersion(8,0,0)]
public class ExampleExt : AutumnBoxExtension{
...
}

ExtAppProperty

在少数情况下,拓展模块可能需要依赖于某个安卓APP,此切面将帮助你检测该APP是否已经安装

//此处将检测手机上是否安装了 小黑屋 APP
[ExtAppProperty("web1n.stopapp")]
public class ExampleExt : AutumnBoxExtension{
...
}

自定义切面

创建一个类,并将其实现IBeforeCreatingAspect或继承BeforeCreatingAspect,然后将其放在ClassExtension上即可!

public class MyAspect : BeforeCreatingAspect{
    public overridevoid BeforeCreating(BeforeCreatingAspectArgs args,ref bool canContinue){
         args.Context.Message("Hello!");
    }
}
[MyAspect]
public class AsepectTest:AutumnBoxExtension{
//...
}

多语言化

特性中的内容是固定的,但如果我开发的拓展需要支持别的语言呢?
秋之盒开放框架早就考虑到了这个问题 ExtName ExtDesc ExtAuth等特性均可进行多次标记并且设定相应语言 一定要设置默认值!!!否则遇到未声明的语言时,将会崩溃 示例

[ExtName("张哥""en-us:zsh2401","jp-jp:zsh2401")]
public class LangExt: AutumnBoxExtension{
...
}
Clone this wiki locally