Realm的默认架构只是项目中的所有Realm模型类。但是,您可以更改此行为-例如,您可能希望限制Realm仅包含类的子集。为此,请创建一个自定义RealmModule。
// 创建module
@RealmModule(classes = { Person.class, Dog.class })
public class MyModule {
}
// 在RealmConfiguration中将module设置为仅允许该module定义的类。
RealmConfiguration config = new RealmConfiguration.Builder()
.modules(new MyModule())
.build();
// 可以将多个module组合成一个模式。
RealmConfiguration config = new RealmConfiguration.Builder()
.modules(new MyModule(), new MyOtherModule())
.build();
对于库开发人员来说: 包含Realm的库必须通过RealmModule
公开并使用其架构。这样做会阻止为库项目生成默认的RealmModule
,这会与App使用的默认RealmModule相冲突。库的RealmModule
也是库向应用程序公开其Realm类的方式。
// 库必须创建一个module并设置library = true。 这将阻止创建默认module。
// 可以使用allClasses = true来代替列出库中的所有类。
@RealmModule(library = true, allClasses = true)
public class MyLibraryModule {
}
// 因此,需要图书馆项目明确设置自己的module。
RealmConfiguration libraryConfig = new RealmConfiguration.Builder()
.name("library.realm")
.modules(new MyLibraryModule())
.build();
// 应用程序可以将库RealmModule添加到其自己的架构中。
RealmConfiguration config = new RealmConfiguration.Builder()
.name("app.realm")
.modules(Realm.getDefaultModule(), new MyLibraryModule())
.build();
一个文件中不能有多个RealmModule声明。如果您有两个或多个RealmModule,则必须将声明分成多个文件,每个文件中只有一个声明。
在此处查看有关RealmModules
如何在库和应用程序项目之间工作的完整示例。