我在这里遇到一些棘手的情况。我有两个服务,我的应用程序需要访问。一个是纯ODATA服务,另一个是WebAPI(带Breeze控制器)服务。
我的应用程序是围绕AngularJS模块设计的,而breeze被注入两个不同的单实例服务:
angular.module('domiciliations.services').
factory('domiciliationService', function (breeze) {
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);
//more initialization goes here
//then query methods go here
}
和
angular.module('person.services').
factory('personService', function (breeze) {
breeze.config.initializeAdapterInstances({ "dataService": "OData" });
//more initialization goes here
//then query methods go here
}
现在显然问题是,一旦人员服务被实例化,定居服务就会使用OData,因为配置被覆盖了。
那么,解决这个问题的一般方法是什么?有没有办法隔离配置? 到目前为止,我能想到的唯一方法是每次调用查询方法时调用initializeAdapterinstances方法,这是不可取的。
修改
根据Jay的推荐,我现在正在使用DataService。我在ctor.resolve中遇到错误:
ds.jsonResultsAdapter = ds.jsonResultsAdapter || ds.adapterInstance.jsonResultsAdapter;
ds.adapterInstance为null,因此会引发异常。但我不明白为什么它是空的。
这就是我所做的:
var service = new breeze.DataService({
serviceName: 'http://localhost:16361/api/mandates',
adapterName: 'WebApi'
});
var manager = new breeze.EntityManager({ dataService: service });
//this is the line causing the later exception:
manager.fetchMetadata().then(function () { ... }
我忘了做某事吗?
答案 0 :(得分:3)
好问题!
initializeAdapterInstance 方法实际上是用于设置“默认”适配器。
如果您需要拥有多个适配器并在每个查询的基础上应用它们,请参阅 DataService 文档,尤其是ctor中的“adapterName”属性。您可以拥有两个DataServices,一个用于OData,另一个用于WebApi。然后,您可以通过 EntityQuery.using 方法使用任何查询。
var odataDataService = new DataService({
serviceName: "Foo",
adapterName: "OData"
});
var webApiDataService = new DataService({
serviceName: "Bar",
adapterName: "WebApi"
});
var query1 = EntityQuery.from(...).where(...);
var query2 = EntityQuery.from(...).where(...);
entityManager.executeQuery(query1.using(odataDataService)).then(...)
entityManager.executeQuery(query2.using(webApiDataService)).then(...)