小编Mic*_*ord的帖子

.NET Core 依赖注入如何处理多个对象

正如标题所示,我有一个 .NET Core 应用程序,我正在尝试将其转换为并利用内置的 Microsoft 依赖注入。

我有一个对象和该对象的基类,将其称为CommunicationBaseCommunicator。当我的应用程序启动并读取配置文件时,我可以实例化 N 个对象。

以前,在切换到依赖注入之前,在我的启动例程中的某个位置,我读取配置文件,我将有一个List<CommunicationBase>变量,我将实例化该Communicator变量并向其添加对象,同时设置一些基本属性,这些属性根据关于我的配置中有多少个以及配置中的每个属性。

我如何通过 DI 实现这一目标?

我知道在我的服务中,我会注册该类型,以便可以将其注入到其他类构造函数中。

例如,services.AddTransient<CommunicationBase, Communicator>();但据我了解,这只是用 DI 注册类型。我可以将它注入到一个类中并拥有其中一个的随机实例。

那么我如何拥有 N 个实例,并能够在创建实例时设置每个实例的属性?

或者,这是一种不需要 DI 或 DI 不起作用而我需要按照以前的方式进行的场景吗?

谢谢!

.net c# dependency-injection .net-core

7
推荐指数
1
解决办法
5422
查看次数

我可以从Windows 10 UWP应用中引用.NetStandard库吗?

有大量的帖子,博客,文章等...解释了有关.Net / .NetCore / .NetStandard的所有这些令人困惑的内容,我已经阅读了很多。

这是问题,我有一个Windows 10 UWP应用,我需要引用我创建的库。我首先将库创建为NetCore库,但无法从我的UWP应用中引用该库(这令人困惑,因为UWP使用.Net Core,但是我创建的.Net Core库假定这是针对ASP.NET的?)。

因此,然后我尝试将该库创建为PCL库,并且仅针对Windows 10 UWP(由于它们相同,因此它将强制您使用Windows 8.1)。有了这种类型的库,我相信我可以从UWP应用程序中引用它,但是这使我丢失了太多无法建立库的.Net名称空间。

最后,我然后在项目属性中选择了链接,以.Net Standard为目标。我选择了.Net Standard 1.4,突然之间,我有了所需的所有命名空间,并且能够构建我的库。我也能够成功将其添加为对我的UWP应用的引用。

但是,我得到了以下6个异常,它们对根本原因并没有告诉我太多,因此我可以对其进行修复。

例外情况

因此,我的主要问题是,您可以在UWP应用程序中引用.Net Standard 1.4库吗?其次,有什么想法这些例外意味着什么?

谢谢!

编辑-我在这里都上传了两个csproj文件:csproj文件

.net c# portable-class-library windows-10-universal

5
推荐指数
1
解决办法
1235
查看次数

无法使 ONNX 模型的输入列名称起作用

我正在使用 ML.NET 导入 ONNX 模型来进行对象检测。作为记录,我从 Microsoft 的 CustomVision.ai 站点导出了模型。

我检查了 Netron 中的模型文件,它清楚地显示输入节点命名为“data”,输出节点命名为“model_outputs0”。

但是,当我尝试运行这行代码来应用 ONNX 模型时

var pipeline = mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: new[] { "model_outputs0" }, inputColumnNames: new[] { "data" }, gpuDeviceId: 0, fallbackToCpu: true);
// Fit scoring pipeline
var model = pipeline.Fit(data);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

找不到输入列“数据”参数名称:inputSchema

这清楚地表明它找不到数据的输入列,即使我清楚地看到这是 Netron 中的名称,如您所见:

在此处输入图片说明

现在,这是我真的不明白的部分。当我尝试其他输出名称时,它有一个不同的错误,它基本上告诉我它实际上应该是数据:

参数名称:输入张量,图像,在ONNX模型中不存在。可用的输入名称是 [data]。实际价值是形象。

.net c# ml.net onnx

5
推荐指数
1
解决办法
957
查看次数

将新设备添加到xaml布局设计器Visual Studio 2015 UWP

我正在使用Visual Studio 2015,创建我的第一个Windows UWP应用程序.我正在尝试创建布局,因此,我在我的项目中添加了一个空白的xaml页面.当我双击时,它确实把我带到了设计师手中.问题是,有预设(普通)设备,如5"电话,6"电话等......以及每种设备的分辨率.

但是,我也针对特定设备,我想确保我的设备上的布局看起来不错.我需要在此列表中添加一个具有我的屏幕大小和分辨率的设备.似乎在Visual Studio中没有内置方法可以执行此操作.如何添加或编辑设备?

谢谢!

c# xaml windows-10 uwp uwp-xaml

4
推荐指数
1
解决办法
1493
查看次数

MakeAppx 的 Windows 10 UWP 应用程序构建问题

我不确定是什么导致了这个错误,我已经研究了几个小时。我正在使用 Visual Studio 2015 更新 3。我正在构建一个将上传到商店的 Windows 10 通用 (UWP) 应用程序。我已经有我的开发中心帐户,它与我的应用程序相关联。最后,当我右键单击项目并选择商店> 创建应用程序包时,我收到此错误:

错误 80080204:文件名为“PacTracMobile.Windows10_1.3.0.0_ARM.appx”和包全名为“OdenIndustriesInc.9510B3DEAC6_1.3.0.0_arm__bdbevzbp0ydz4”的包在包中无效,因为包TracPac也包含包.Windows10_1.3.0.0_x86.appx”和包全名“OdenIndustriesInc.9510B3DEAC6_1.3.0.0_arm__bdbevzbp0ydz4”适用于相同的处理器架构。捆绑包不能包含用于同一处理器架构的多个应用程序包,或具有任何特定于架构的应用程序包的架构中立应用程序包。

此错误与记录的文件 MakeAppx 有关。我正在尝试构建 x86、x64 和 ARM。当我在调试时,我可以很好地构建、部署和测试,没有错误。但是,当我选择构建我的应用程序包时,我得到了这个。

请注意,Visual Studio 处于发布模式,任何 CPU。也就是说,当我选择创建应用程序包时,在第一个弹出窗口中,我选择在发布中构建每三个平台。我的屏幕看起来像这样:

除了我的包输出路径之外,我的构建看起来到底是怎样的

当我单击创建时,它开始构建,最终出现上述错误。

有什么想法吗?

谢谢!!!

编辑 - 作为记录,我上面显示的屏幕截图是我从 Microsoft 的这些说明中获得的。我已经并且正在完全遵循这些说明!MSDN 构建 UWP 应用

更新 - 如果在上面屏幕截图的窗口中,我取消选择 x84 和 x64(这并不理想,因为我想要所有三个)并且只执行 ARM,我不会收到任何错误并且程序包完成。根据一些阅读,我怀疑如果我一个一个地执行(即,只选择 x86 再次运行),它会构建得很好,但我将剩下三个应用程序包,而不是一个。因此,这似乎与尝试一次构建所有三个并将其打包成一个包有关,这正是错误所逃避的原因,但同样,该错误或我在网上阅读的任何内容都解释了如何解决该问题。

.net windows-store-apps visual-studio-2015 uwp windows-10-universal

4
推荐指数
2
解决办法
2358
查看次数

UWP StorageFolder访问Downloads文件夹

我已经对MSDN和SO做了大量的研究,但似乎有很多关于这个主题的混合评论,没有直截了当的答案.我的UWP应用程序需要为用户下载一些项目.它进入"下载"文件夹而不是文档或图片似乎是合乎逻辑的.

我从阅读中收集到的是,允许应用程序访问下载文件夹并在下载文件夹中创建文件和子文件夹.但是,如果不使用选择器,它将无法访问其他文件和文件夹(不是从您的应用程序创建的).在这种情况下,我不需要使用选择器,因为我的应用程序正在使用并为自己创建文件夹.我也读过,Manifest中不需要特殊的功能来实现这个功能.

我可以通过在downloads文件夹中创建文件夹和文件来确认这确实有效

StorageFile destinationFile;
StorageFolder downloadsFolder;
try
{
   //Create a sub folder in downloads
   try
   {
         downloadsFolder = await DownloadsFolder.CreateFolderAsync("AppFiles");
   }
   catch (Exception ex)
   {
       //HERE IS THE ISSUE. I get in here if the folder exists but how do i get it?
   }

   destinationFile = await downloadsFolder.CreateFileAsync(destination,CreationCollisionOption.GenerateUniqueName);
}
catch (FileNotFoundException ex)
{
     rootPage.NotifyUser("Error while creating file: " + ex.Message, NotifyType.ErrorMessage);
     return;
}
Run Code Online (Sandbox Code Playgroud)

但是,这是主要问题.此代码第一次正常工作,因为该文件夹尚不存在,并与文件一起创建.随后的一段时间,它失败并引发异常:

该文件已存在时无法创建文件.(HRESULT异常:0x800700B7)

它在行上执行此操作以在Downloads文件夹中创建文件夹:

downloadsFolder = await DownloadsFolder.CreateFolderAsync("AppFiles");
Run Code Online (Sandbox Code Playgroud)

问题是MSDN声明我不能使用"OpenIfExists"或"ReplaceExisting"的碰撞选项,这是我需要解决这个问题的两个碰撞选项.剩下的两个选项对我没有好处.因此,无论如何,如果文件夹存在,它将抛出异常.

然后,我的想法是我可以捕获异常,就像我已经在上面的代码片段中做的那样,并打开文件夹(如果它存在).这个问题是"DownloadsFolder"类没有提供任何选项来获取或打开文件夹,只是为了创建一个文件夹.

所以,似乎我可以从我的应用程序创建文件夹,但我无法打开或获取我的应用程序创建的文件夹?

谢谢!

.net c# windows-10 uwp windows-10-universal

4
推荐指数
1
解决办法
1132
查看次数

TensorFlow对象检测在Xamarin Android上失败并出现重塑问题

我几乎完全关注此博客文章和GitHub:

博客

Github

但是当我跑步时,拍一张照片并称这行:

var outputs = new float[tfLabels.Count];
tfInterface.Feed("Placeholder", floatValues, 1, 227, 227, 3);
tfInterface.Run(new[] { "loss" });
tfInterface.Fetch("loss", outputs);
Run Code Online (Sandbox Code Playgroud)

该应用实际上崩溃了,并在.Run行下面生成了错误。

我在输出窗口中收到此错误(应用崩溃):

04-04 17:39:12.575 E / TensorFlowInferenceInterface(8017):使用以下输入运行TensorFlow推理失败:[占位符],输出:[损失]未处理的异常:

Java.Lang.IllegalArgumentException:要重塑的输入是具有97556值的张量,但是请求的形状需要90944的倍数
[[Node:block0_0_reshape0 = Reshape [T = DT_FLOAT,Tshape = DT_INT32,_device =“ / job:localhost / replica :0 /任务:0 /设备:CPU:0“](block0_0_concat,block0_0_reshape0 / shape)]]

根据我正在对这个错误进行的搜索中读取的帖子,我有点理解这是由于图像不完全符合预期的大小,但是在我遵循的示例中,每次都将其调整为适合227x227的大小并进行转换像这些行中那样浮动:

var resizedBitmap = Bitmap.CreateScaledBitmap(bitmap, 227, 227, false).Copy(Bitmap.Config.Argb8888, false);

var floatValues = new float[227 * 227 * 3];
var intValues = new int[227 * 227];

resizedBitmap.GetPixels(intValues, 0, 227, 0, 0, 227, 227);

for(int …
Run Code Online (Sandbox Code Playgroud)

android xamarin.android xamarin tensorflow

4
推荐指数
1
解决办法
246
查看次数

将 Java Object 类型转换为我的类

使用 Xamarin 在 C# .Net 4.5 中开发应用程序,针对 Android。我有一个自定义类,其中包含一些属性。我正在尝试使用使用 Java.Util.IComparator 和 Java.Lang.Object 进行比较的内置组件。因为它是一个内置组件,所以我没有太多的灵活性来改变这两个项目。

我的自定义类名为 recBatch,在其中,我有一些整数和字符串的属性。

这是组件初始化的地方。每次用户单击第 0 列的标题时,它基本上都会调用一个方法。

tableView.SetColumnComparator(0, GetBatchIdComparator());

这是组件调用的方法

public Java.Util.IComparator GetBatchIdComparator() { return new BatchIdComparator(); }

最后,这是调用返回的类。

public class BatchIdComparator : Java.Lang.Object, Java.Util.IComparator
{


    public int Compare(Java.Lang.Object lhs, Java.Lang.Object rhs)
    {
        var leftID = (recBatch)lhs;
        var rightID = (recBatch)rhs;

        return leftID.Batch.CompareTo(rightID.Batch);
    }


}
Run Code Online (Sandbox Code Playgroud)

我尝试通过强制转换在上面做的第一件事给了我一个错误,如下所示。我确实尝试了 Visual Studio 的建议,但也无法使其正常工作。

错误说无法从对象转换为 recBatch

我尝试的下一件事是创建一个像这样的新类,并将转换从 recBatch,我的实际类更改为这个新类以进行转换:

 public class BatchIdComparator : Java.Lang.Object, Java.Util.IComparator

 {


    public int Compare(Java.Lang.Object lhs, Java.Lang.Object rhs)
    {
        var leftID = (castClass)lhs;
        var …
Run Code Online (Sandbox Code Playgroud)

c# java android xamarin.android xamarin

1
推荐指数
1
解决办法
4776
查看次数