如何解决在共享项目上调用 UWP 服务
我有一个 Xamarin 应用程序,我在其中实现了一项打印服务。我在 UWP 应用上创建该服务,因为它需要它的一些依赖项。
UWP 服务:
public class PrintUWPService
{
PrintManager printmgr = PrintManager.GetForCurrentView();
PrintDocument PrintDoc;
PrintDocument printDoc;
PrintTask Task;
private Windows.UI.Xaml.Controls.WebView ViewToPrint = new Windows.UI.Xaml.Controls.WebView();
public PrintUWPService()
{
printmgr.PrintTaskRequested += Printmgr_PrintTaskRequested;
}
public async void Print(WebView viewToPrint,string htmlSource)
{
ViewToPrint.NavigatetoString(htmlSource);
if (PrintDoc != null)
{
printDoc.GetPreviewPage -= PrintDoc_GetPreviewPage;
printDoc.Paginate -= PrintDoc_Paginate;
printDoc.AddPages -= PrintDoc_AddPages;
}
printDoc = new PrintDocument();
try
{
printDoc.GetPreviewPage += PrintDoc_GetPreviewPage;
printDoc.Paginate += PrintDoc_Paginate;
printDoc.AddPages += PrintDoc_AddPages;
var showprint = await PrintManager.ShowPrintUIAsync();
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
PrintDoc = null;
GC.Collect();
}
private void Printmgr_PrintTaskRequested(PrintManager sender,PrintTaskRequestedEventArgs args)
{
var deff = args.Request.GetDeferral();
Task = args.Request.CreatePrintTask("Grocery List",OnPrintTaskSourceRequested);
deff.Complete();
}
async void OnPrintTaskSourceRequested(PrintTaskSourceRequestedArgs args)
{
var def = args.GetDeferral();
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.dispatcher.RunAsync(Windows.UI.Core.CoredispatcherPriority.normal,() =>
{
args.SetSource(printDoc.DocumentSource);
});
def.Complete();
}
private void PrintDoc_AddPages(object sender,AddPagesEventArgs e)
{
printDoc.AddPage(ViewToPrint);
printDoc.AddPagesComplete();
}
private void PrintDoc_Paginate(object sender,PaginateEventArgs e)
{
PrintTaskOptions opt = Task.Options;
printDoc.SetPreviewPageCount(1,PreviewPageCountType.Final);
}
private void PrintDoc_GetPreviewPage(object sender,GetPreviewPageEventArgs e)
{
printDoc.SetPreviewPage(e.PageNumber,ViewToPrint);
}
}
}
然后我为它创建界面:
public interface IPrintUWPService
{
void Print(WebView viewToPrint,string htmlSource);
}
现在在我共享项目的一个类中,我想将此服务称为:
private readonly IPrintUWPService _printService = DependencyService.Get<IPrintUWPService>();
但它不起作用。它说:
IPrintUWPService 在当前上下文中不存在
所以我尝试访问 UWP 类:
using MyCompany.ProjectName.App.UWP
但它说“UWP”命名空间不存在。我究竟做错了什么?共享项目中的 UWP 项目无法调用服务?问候
解决方法
在共享项目上调用 UWP DependencyService
正如@Jason 在上面的评论中提到的,您需要在 Xamarin Forms 项目中声明接口并在 UWP 客户端项目中实现它。
并且请note,在每个平台项目中实现接口后,平台实现必须注册到DependencyService
,以便Xamarin.Forms 可以在运行时定位它们。使用 DependencyAttribute
如下所示。
[assembly: Dependency(typeof(UWP Client namesapce))]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。