小编Sor*_*scu的帖子

Reflection是否打破了封装原则?

好吧,假设我们有一个类定义的类

public class TestClass
{
    private string MyPrivateProperty { get; set; }

    // This is for testing purposes
    public string GetMyProperty()
    {
        return MyPrivateProperty;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我们尝试:

TestClass t = new TestClass { MyPrivateProperty = "test" };
Run Code Online (Sandbox Code Playgroud)

TestClass.MyPrivateProperty is inaccessible due to its protection level正如预期的那样,编译失败.

尝试

TestClass t = new TestClass();
t.MyPrivateProperty = "test";
Run Code Online (Sandbox Code Playgroud)

并使用相同的消息再次编译失败.

一切都很好,直到现在,我们都在期待这一点.

但后来写道:

PropertyInfo aProp = t.GetType().GetProperty(
        "MyPrivateProperty",
        BindingFlags.NonPublic | BindingFlags.Instance);

// This works:
aProp.SetValue(t, "test", null);

// Check
Console.WriteLine(t.GetMyProperty());
Run Code Online (Sandbox Code Playgroud)

在这里,我们设法改变了一个私人领域.

仅使用反射能够改变某个物体的内部状态是不是不正常?

编辑:

感谢到目前为止的回复.对于那些说"你不必使用它"的人:那个班级设计师怎么样,看起来他再也不能承担内部的国家安全了?

c# oop reflection

10
推荐指数
2
解决办法
2264
查看次数

Swagger无法正常使用多个版本的ASP.NET WebApi应用程序

请帮助我,一开始看起来很容易,现在我在项目中迟到了:

我正在尝试为Swager和ASP.NET WebApi项目设置API版本.API版本控制正常,调用不同的版本会返回正确的结果(见下文).

相反,Swagger无法为这两个版本提供服务.在调试时,我注意到当c.MultipleApiVersions(...)在SwaggerConfig.cs中调用时,报告的控制器apiDesc.ActionDescriptor.ControllerDescriptor总是PingController从不Ping11Controller.

有人可以指出要解决这个问题需要做些什么,并且Swagger也适用于这两个版本?

下面,API版本的代码和证明工作正常,而Swagger仅适用于v1.0.

谢谢!

调用API v1.0有效: 在此输入图像描述

调用API v1.1也适用: 在此输入图像描述

Swagger for v1.0很好: (http:// localhost:50884/v1.0/swagger)

{
   "swagger":"2.0",
   "info":{
      "version":"v1.0",
      "title":"My API v1.0"
   },
   "host":"localhost:50884",
   "schemes":[
      "http"
   ],
   "paths":{
      "/api/ping":{
         "get":{
            "tags":[
               "Ping"
            ],
            "summary":"Get a pong.",
            "operationId":"GetAPong",
            "consumes":[
            ],
            "produces":[
               "application/json",
               "text/json",
               "application/xml",
               "text/xml"
            ],
            "responses":{
               "200":{
                  "description":"OK"
               },
               "404":{
                  "description":"NotFound"
               }
            }
         }
      }
   },
   "definitions":{
   }
}
Run Code Online (Sandbox Code Playgroud)

Swagger for v1.1为空: (http:// localhost:50884/v1.1/swagger)

{
   "swagger":"2.0",
   "info":{ …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api swagger swashbuckle

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

MonoTouch - 我们应该使用企业版还是专业版?

我们是一家软件开发公司,愿意为我们的客户开发iPhone/iPad应用程序.

我们知道,为了能够在我们的客户端部署我们的应用程序,他们必须在Apple的iOS开发人员企业计划中注册并将我们添加到开发团队中.

目前还不清楚我们是否需要购买企业分发的MonoTouch许可证,或者只要客户已在Apple的企业计划中注册,简单的专业许可证就允许我们在大量设备上签署和部署该应用程序.

虽然问题针对的是MonoTouch的许可选项,但是如何处理第一句中描述的常见场景的任何实用建议也会有很大帮助.

谢谢.

iphone licensing xamarin.ios ios

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

针对 Android SDK 版本 29 后,对“下载”文件夹的读/写被拒绝

我的 Flutter 应用程序需要读取和写入下载文件夹(/storage/emulated/0/Download更准确地说)。

在针对 SDK 版本 29(targetSdkVersion 29在 build.gradle 中)之前,这一切进展顺利,只需请求

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:remove="android:maxSdkVersion" />
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

令我惊讶的是,在我的手机上部署新版本后,该应用程序在尝试访问该文件夹时开始出现访问被拒绝的错误,尽管已授予上述两个权限的访问权限。我想这是因为我将 targetSDKVersion 更改为 29。

解决方案是添加到 中的android:requestLegacyExternalStorage="true"节点。<app>AndroidManifest.xml

不过,Android 11 似乎会忽略这个标志,所以这只是一个临时修复。

所以,我的问题是:在即将推出的 Android 版本中,确保访问 Flutter 应用程序的下载文件夹的正确、官方、可靠的方法是什么?

下载文件夹的使用有严格要求。

谢谢你!

android android-permissions flutter

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

是否有可能知道 JPEG 图像是否仅从其原始字节旋转?

您能判断(假设使用 .NET 4.0、WinForms)JPEG 图像是否仅从其二进制(如 的结果File.ReadAllBytes())旋转?

更新


到目前为止,谢谢大家的回答。

对于任何试图解决同一问题的人来说,这只是一个提示。我被这个System.Drawing.Image类欺骗了,它在初始化时加载 EXIF 标签,FromFile(...)但在从流初始化时似乎忽略了它们。我正在使用ExifTagCollection库来读取 EXIF 标签,但我想结果将与任何其他库相媲美。

var bytes = (get binary from server)
File.WriteAllBytes(path, bytes);
Run Code Online (Sandbox Code Playgroud)

作品

var image = Image.FromFile(path);
Run Code Online (Sandbox Code Playgroud)

不起作用:(也失败FileStream了)

using (var ms = new MemoryStream(bytes))
{
    image = Image.FromStream(ms);
}
Run Code Online (Sandbox Code Playgroud)

继续:

ExifTagCollection exif = new ExifTagCollection(image);
foreach (ExifTag tag in exif)
{
    Console.WriteLine(tag.ToString());
}
Run Code Online (Sandbox Code Playgroud)

如果从流加载,则没有标签。

.net c# jpeg rotation

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

使用MonoTouch制作自我更新的iOS应用程序有哪些选择?

我正在尝试制作一个iPad/iPhone应用程序(使用MonoTouch),首先检查当前版本与自定义Web服务报告的最新版本.如果应用程序已过期,则应从Web服务下载新版本的二进制文件并替换当前版本.

该应用程序将通过ad-hoc或通过企业部署进行分发,因此不受Apple的验证或AppStore的版本控制系统的限制.

我正在考虑制作两个应用程序,一个引导程序和真正的应用程序.在Windows下,引导程序将使用简单的文件操作来替换真正的应用程序,但在iOS下我不太确定这是可能的,如果可能的话,我不知道该怎么做.

所以,问题是:使用MonoTouch for iOS制作自我更新应用程序的"正确"方法是什么?

谢谢.


UPDATE

好像我有这个工作,至少在模拟器中.

基本思想是在引导程序中实现最小化,如Main()方法和AppDelegate,然后使用反射从位于应用程序包外部的二进制文件加载导航控制器和其他所有内容,这将受制于自我更新操作.

这是bootstrapper代码:

Main.cs

namespace Bootstrapper
{
    public class Application
    {
        static void Main (string[] args)
        {
            UIApplication.Main (args,null,"AppDelegate");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

AppDelegate.cs

namespace Bootstrapper
{
    [Register("AppDelegate")]
    public class AppDelegate : UIApplicationDelegate
    {
        // Connect window and navigationController stuff
        // ...

        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            Assembly asm = Assembly.LoadFile(@"/Users/sorincom/Projects/SelfUpdate/TheApp/bin/Debug/TheApp.dll");

            navigationController = (UINavigationController)Activator.CreateInstance(asm.GetType("TheApp.NavigationController"));

            window.AddSubview (navigationController.View);
            window.MakeKeyAndVisible ();

            return true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

真正的应用代码:

NavigationController.cs

namespace TheApp …
Run Code Online (Sandbox Code Playgroud)

deployment auto-update xamarin.ios ad-hoc-distribution ios

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

Angular $ watch不工作?

以下代码仅在最初加载页面时记录.怎么了?

<!DOCTYPE html>
<html ng-app>
    <head>
        <title>Test</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script>
    </head>
    <body>
        <div ng-controller="PageController">
            <p ng-bind="model.header"></p>
            <p>Value: <input ng-model="model.header" /></p>
        </div>
        <script>
            function PageController($scope) {
                $scope.model = {};
                $scope.model.header = 'Header';

                $scope.onModelChange = function (newValue, oldValue, scope) {
                    console.log('model changed > newValue: ' + newValue + ' > oldValue: ' + oldValue);
                };

                $scope.$watch($scope.model, $scope.onModelChange, true);
            }
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

angularjs

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