Xamarin.android Breeze#代表Xamarin.表单(UWP、Droid和iOS)?
在中,Xamarin显示为他们的一个客户端,但我无法安装该包,该包也带有Xamarin标记 它确实安装到PCL项目中,但为了使其正常工作,我需要将其安装到所有平台项目中。当我尝试这样做时,会出现以下错误: iOS/Android: 无法安装程序包“Microsoft.AspNet.WebApi.Client 5.2.3”。您正在尝试将此软件包安装到目标为“Xamarin.iOS,Version=v1.0”的项目中,但该软件包不包含任何与该框架兼容的程序集引用或内容文件。有关更多信息,请联系软件包作者 UWP: 软件包Breeze.Sharp 0.6.0.9与uap10.0(UAP,版本=v10.0)/win10-x86-aot不兼容。软件包Breeze.Sharp 0.6.0.9支持:net(.NETFramework,版本=v0.0) 一个或多个程序包与UAP不兼容,版本=v10.0(win10-x86-aot)Xamarin.android Breeze#代表Xamarin.表单(UWP、Droid和iOS)?,xamarin.android,xamarin.forms,breeze,xamarin.uwp,breeze-sharp,Xamarin.android,Xamarin.forms,Breeze,Xamarin.uwp,Breeze Sharp,在中,Xamarin显示为他们的一个客户端,但我无法安装该包,该包也带有Xamarin标记 它确实安装到PCL项目中,但为了使其正常工作,我需要将其安装到所有平台项目中。当我尝试这样做时,会出现以下错误: iOS/Android: 无法安装程序包“Microsoft.AspNet.WebApi.Client 5.2.3”。您正在尝试将此软件包安装到目标为“Xamarin.iOS,Version=v1.0”的项目中,但该软件包不包含任何与该框架兼容的程序集引用或内容文件。有关更多信息,请联系软件包
我是这样决定的。
1.创建新的可移植类库
2.添加BreezeSharp作为新可移植类库(Nuget)的参考
3.添加新类库作为特定平台项目(Android、iOS)的参考。就我而言,只有Android。
4.在便携式图书馆。创建静态类ex:Configs。
5.Android项目->MainActivity.OnCreate
Configs.ModelAssembly = typeof(Customer).Assembly;
公共抽象类BaseDataService,其中T:BaseEntity
{
公共静态字符串元数据{get;protected set;}
公共字符串EntityName{get;protected set;}
公共字符串EntityResourceName{get;protected set;}
公共EntityManager EntityManager{get;set;}
公共字符串DefaultTargetMethod{get;protected set;}
静态BaseDataService()
{
常量=ConstantsFactory.Get;
尝试
{
var metadata=GetMetadata();
metadata.Wait();
元数据=Metadata.Result;
}
捕获(例外情况除外)
{
var b=0;
}
}
public BaseDataService(字符串resourceName,字符串targetMethod=null)
{
var modelType=类型(客户);
Configuration.Instance.ProbeAssemblies(ConstantFactory.BusinessAssembly);
尝试
{
this.EntityName=typeof(T).FullName;
this.EntityResourceName=资源名称;
this.DefaultTargetMethod=(string.IsNullOrWhiteSpace(targetMethod)-“GetAll”:targetMethod);
var dataService=new dataService($“{ConstantsFactory.Get.BreezeHostUrl}{this.EntityResourceName}”,new CustomHttpClient());
dataService.HasServerMetadata=false;
var metadataStore=新的metadataStore();
var namingConvention=namingConvention.CamelCaseProperties;/*元数据存储.namingConvention;*/*namingConvention.Default;*///新的namingConvention()
namingConvention=namingConvention.WithClientServerNamespaceMapping(
新字典{“Business.DomainModels”,“DomainModel.Models”}
);
metadataStore.NamingConvention=NamingConvention;
metadataStore.ImportMetadata(元数据,true);
this.EntityManager=新的EntityManager(数据服务、元数据存储);
this.EntityManager.MetadataStore.AllowedMetadataMismatchTypes=MetadataMismatchTypes.AllAllowable;
//将匿名处理程序附加到MetadataMismatch事件
this.EntityManager.MetadataStore.MetadataMismatch+=(s,e)=>
{
//记录不匹配情况
var message=string.Format(“{0}:Type={1},Property={2},Allow={3}”,
e、 MetadataMismatchType,e.StructuralTypeName,e.PropertyName,e.Allow);
//不允许TodoItem实体类型上缺少导航属性
如果(e.MetadataMismatchType==MetadataMismatchTypes.MissingCLRNavigationProperty&&
e、 StructureTypeName.StartWith(“TodoItem”))
{
e、 允许=假;
}
};
}
捕获(例外情况除外)
{
var b=0;
}
}
公共异步任务GetAll(字符串targetMethod=null)
{
var internalTargetMethod=(string.IsNullOrWhiteSpace(targetMethod)?this.DefaultTargetMethod:targetMethod);
var query=新EntityQuery(internalTargetMethod);
var qr=wait this.EntityManager.ExecuteQuery(查询);
var result=qr.ToList();
返回结果;
}
公共作废删除(T实体)
{
entity.EntityAspect.Delete();
}
私有静态异步任务GetMetadata()
{
var client=新的HttpClient();
var metadata=await client.GetStringAsync(ConstantsFactory.Get.MetadataUrl).ConfigureAwait(false);
var ret=JsonConvert.DeserializeObject(元数据);
返回ret.metadata;
}
}
在我从Breeze#的发明者IdeaBlade收到的一封电子邮件中,他说虽然Breeze#没有死,但与BreezeJS相比,它淹没的社区注意力要少得多,因此他们更愿意将资源投入JS库
现在,我只想用@。虽然没有Breeze全面,但部分工作做得很好。我尝试了你的方法,结果也一样。因此,我创建了一个参考BreezeSharp的便携式组件。我现在面临的问题是在该共享库中执行Configuration.Instance.probeAssembly,因为我无法访问Type.Assembly属性。更新:我通过汇编解决了我的问题