小编Tur*_*ete的帖子

C#.NET:获取管理员权限?

是否可以在C#.NET应用程序中请求Windows 7 PC上的管理权限?

我希望能够通过Click Once部署应用程序,并让用户使用它来执行管理任务(在这种情况下,它正在为主应用程序编写注册表项).

c# security administrator

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

C#:使用"self"类型作为通用参数?

这看起来有点奇怪,但我真的需要为C#中非常复杂的双工 - 通信 - 处理创建一个解决方法,特别是强迫其他开发人员遵守DRY原则.

所以我正在做的是有一个类型为基础的multiton,如下所示:

internal sealed class SessionManager<T> where T : DuplexServiceBase
Run Code Online (Sandbox Code Playgroud)

这根本没问题 - 到目前为止.

但是,只要我想拥有服务(我将在每个会话中使用一个实例)使用SessionManager注册自己,麻烦就开始了:

internal abstract class DuplexServiceBase : MessageDispatcherBase<Action>
Run Code Online (Sandbox Code Playgroud)

(MessageDispatcherBase是我的一个类,它创建一个线程并异步发送消息).

我想有一个看起来像这样的方法:

    protected void ProcessInboundMessage()
    {
        // Connect
        SessionManager<self>.Current.Connect(this);
    }
Run Code Online (Sandbox Code Playgroud)

......但问题是 - 我怎么才能进入"自我"?

我真的需要为每个服务类单独的会话管理器,因为它们都有自己的通知(基本上它是非常讨厌的"NotifyAllClients" - 这个方法让我们想要在最后几个小时内完成自己的头发)并且需要单独处理.

你有什么想法?

我不想使用"AsyncPattern = true",顺便说一句......这将要求我放弃类型安全,强制执行合同(这会导致滥用我在此处设置的通信系统)和需要放弃DRY原则,整个地方会有很多重复的代码,这是我非常鄙视的事情.

编辑:

我找到了最好的解决方案,感谢这里的答案 - 这是一种扩展方法,呵呵......

    public static SessionManager<T> GetSessionManager<T>(this T sessionObject) 
        where T : DuplexServiceBase
    {
        return SessionManager<T>.Current;
    }
Run Code Online (Sandbox Code Playgroud)

我可以这样使用:

GetSessionManager().Connect(this);
Run Code Online (Sandbox Code Playgroud)

任务完成.:-D

这个方法(属于DuplexServiceBase)给了我想要使用的会话管理器.完善!:-)

c# wcf singleton type-systems design-patterns

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

不愿意将样板代码视为主要问题?为什么?对策?

几乎在我工作的每个地方,我遇到了很多不关心他们制作了大量样板代码的人.

对我来说,这是有史以来最糟糕的事情之一,它导致错误,它很无聊,它会增加噪音.

最糟糕的例子可能是甚至微软不愿意为这个烦人的"INotifyPropertyChanged"提供更好的语法 - 东西.您不能使用自动生成的属性,您必须创建一个大的冗余(在调用"OnPropertyChanged"或调用任何提升方法时复制属性名称).

有些人甚至认为,许多编程语言中的大多数程序主要包含相同的重复代码(噪声),而不是有趣的东西(信号).请参阅MSDN - 例如,在整个地方有太多不需要的,重复的代码(可怕的"INotifyPropertyChanged" - 破坏所有流程的模式只是冰山一角).

但是,当我提出这个问题并提出像AOP(PostSharp.NET)这样的解决方案或使用委托(对于非C# - 人:匿名函数,通常使用lambda运算符实现)时,我得到的只是"我们不关心".

其他任何人都受到样板代码引入的大量噪音的困扰,并且想要考虑如何将解决方案推向样板 - 问题?

language-agnostic

6
推荐指数
2
解决办法
179
查看次数

SerialPort.Close()问题 - 无法使用taskmanager关闭应用程序!

这是一个主要问题 - 我在应用程序中使用串行端口,然后通过打开然后再次关闭端口来轮询连接设备的状态.

如果设备出现故障,有时候SerialPort.Close() - 方法会返回,这实际上是一个显示停止.

最糟糕的是,即使使用taskmanager关闭应用程序失败,它也不起作用(或者是偶然禁止的).

连接的设备是一个模拟COM3的POS打印机(USB),它是一个Epson TM-T88IV(一个非常好的型号,顺便说一句).

你们中有谁有经验吗?

c# crash timeout serial-port

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

WCF服务继承

我有一个非常复杂的服务主机,其中包含多个DUPLEX服务。它们提供了一些通用功能(连接,断开连接,KeepAlive等),但除此之外,它们每个都提供了非常特定的功能。

我所有的服务都继承自一个公共基类(抽象)。

因此,我还负责部分客户端应用程序,并且希望在基类中进行管理官僚化的连接,断开连接,保持活动ping和重新连接(等...)的官僚主义处理,以便观察DRY原理并强制其他开发人员不要实现自己的连接处理。

有什么方法可以让WCF公开服务基类,以便我可以为客户端应用程序中的官僚浪费时间创建一个通用包装类?

我真的不想看到每个未来的客户端组件开发人员都创建自己的包装器吗?

而且,如果您允许咆哮:

为什么,为什么,为什么Microsoft完全忽略了干净代码开发的最佳实践和基本原则?与此INotifyPropertyChanged相同-在这种情况下,人们被迫编写大量不必要的重复代码,而不是使用简单的属性来通知属性...

c# wcf inheritance

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

Unity/EntLib:将依赖项注入CustomTraceListener

对不起,这是一个非常特殊的主题,所以这可能不是很多人感兴趣的.:-(

但是,我需要做以下事情:

  • 我有一个应用程序,它提供了某种控制台窗口的日志记录(它是一个WPF窗口,因为应用程序需求,因为应用程序需要看起来华而不实 - 我们的特殊客户要求并在每次我们见面时讨论它)

  • 为了提供与线程无关的日志记录,我创建了一个接口/实现对"IGUIController"/"GUIController"

到现在为止还挺好.一切都很好.

然而:

  • 我需要我自己的自定义跟踪侦听器(我称之为"GUITraceListener"),它使用IGUIController接口将特定的日志消息写入那个华而不实的WPF​​窗口

到目前为止,我的解决方案是让一个黑客,旧的skool代码闻到单身式 - 风格"当前" - 我的GUIController属性(是的,我很惭愧,我知道这很糟糕),我这样调用:

GUIController.Current.Log(message);
Run Code Online (Sandbox Code Playgroud)

显然,这是一个禁忌.

因此,正确的方法是注入依赖(当然).但是,当我这样做时,我得到了投诉(运行时),我没有为我的GUITraceListener类提供0(零)参数的构造函数.

事实上,我在这里得到:

EnterpriseLibraryContainer.ConfigureContainer(configurator, 
ConfigurationSourceFactory.Create());
Run Code Online (Sandbox Code Playgroud)

投诉是:

ArgumentException未处理无法为GUITraceListener找到合适的0参数构造函数

这真的很糟糕.我的意思是,Unity是企业库的一部分,为什么这些人不会简单地添加注入我的依赖项的可能性?

澄清:

我最终想要的是:

    /// <summary>
    /// Constructor
    /// </summary>
    /// <param name="guiController"></param>
    public GUITraceListener(IGUIController guiController)
    {
        // Store the dependencies
        this.m_GUIController = guiController;
    }
Run Code Online (Sandbox Code Playgroud)

enterprise-library ioc-container unity-container

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