小编sun*_*ide的帖子

IoC/DI容器,工厂和运行时类型创建

我最近了解了DI框架Guice和Ninject,并希望在我的一些新项目中使用它们.

虽然我熟悉一般依赖注入概念并且知道如何使用这些框架来构建对象图,但在动态应用程序行为方面,我很难应用IoC .

考虑这个例子:

  • 应用程序启动时,将显示主窗口.
  • 当用户单击主面板时,将打开上下文菜单.
  • 根据用户的选择,将创建一个新的用户控件并显示在鼠标位置.
  • 如果用户最终决定关闭该应用程序,将显示一个确认框,并在确认后关闭主窗口.

虽然很容易将主窗口的View连接到Presenter/ViewModel,然后将其绑定到域逻辑,但我不明白如何干净地(在IoC意义上)实现以下任务:

  • 动态实例化具体的UI控件(例如IGreenBoxView,IRedImageView< - JConcreteGreenBoxView,JConcreteRedImageView),而不使用任何类型的服务定位器模式(例如,再次从IoC请求)
    • 根据具体情况,创建新模型,演示者和视图实例
  • 类似地,例如JOptionPane在运行时实例化一个新的具体对话框

我已经看到一些使用抽象工厂的解决方案,但老实说并没有完全理解它们.似乎这样的解决方案会导致一些(查看域名,presenter域名,......)内部类型暴露给构造根,并随之暴露给整个世界.

那么 - 我该怎么做呢?

c# java language-agnostic design-patterns dependency-injection

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

C#DataGridView,大单元格:内容永远不会完全可见,滚动跳过单元格

DataGridView当有一个DataGridViewCell大于DataGridView本身的控件时,我遇到了一个相当讨厌的控件问题(Windows.Forms,.NET Framework 3.0).当大单元格滚动到视图中时,它会正常显示,因为它比视图大,所以在底部切断.如果你进一步向下滚动它最终"捕捉"在顶部并保持在那里,直到你达到一定的阈值.然后,下一行将显示在顶部,"大"行将消失.

因此,您永远无法完全看到大单元格的内容.

这是一个示例代码:

using System;
using System.Windows;

namespace LoggerTextBox {
public class TestForm : Form
{
    public TestForm()
    {
        Text = "DataGridView Large Cell Example";
        SetBounds(0, 0, 300, 200, BoundsSpecified.Width | BoundsSpecified.Height);

        DataGridView dataGridView = new DataGridView();
        dataGridView.Dock = DockStyle.Fill;
        dataGridView.ScrollBars = ScrollBars.Both;
        dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
        Controls.Add(dataGridView);

        DataGridViewColumn column = new DataGridViewTextBoxColumn();
        column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        column.CellTemplate.Style.WrapMode = DataGridViewTriState.True;
        dataGridView.Columns.Add(column);

        // normal row
        DataGridViewRow row = new DataGridViewRow();
        DataGridViewCell cell = (DataGridViewTextBoxCell)column.CellTemplate.Clone();
        cell.Value = "Foo";
        row.Cells.Add(cell); …
Run Code Online (Sandbox Code Playgroud)

.net c# datagridview scrollbar winforms

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

有没有办法在.NET中进行'正确'的算术舍入?/ C#

我试图将一个数字舍入到它的第一个小数位,考虑到不同的MidpointRounding选项,这似乎运作良好.但是,当该数字具有随后的小数位数时会出现问题,这些小数位数会在算术上影响舍入.

一个例子:

随着0.1,0.11..0.190.141..0.44它的工作原理:

Math.Round(0.1, 1) == 0.1
Math.Round(0.11, 1) == 0.1
Math.Round(0.14, 1) == 0.1
Math.Round(0.15, 1) == 0.2
Math.Round(0.141, 1) == 0.1
Run Code Online (Sandbox Code Playgroud)

但随着0.141..0.149它总是回归0.1,虽然0.146..0.149应该回合0.2:

Math.Round(0.145, 1, MidpointRounding.AwayFromZero) == 0.1
Math.Round(0.146, 1, MidpointRounding.AwayFromZero) == 0.1
Math.Round(0.146, 1, MidpointRounding.ToEven) == 0.1
Math.Round(0.146M, 1, MidpointRounding.ToEven) == 0.1M
Math.Round(0.146M, 1, MidpointRounding.AwayFromZero) == 0.1M
Run Code Online (Sandbox Code Playgroud)

我试图提出一个解决这个问题的函数,并且它适用于这种情况,但当然如果你尝试舍入即0.144449它的第一个十进制数字(应该是0.2,但结果0.1)它会很好地失败.(那不是也不能使用Math.Round().)

private double "round"(double value, int digit)
{
    // basically the …
Run Code Online (Sandbox Code Playgroud)

.net c# math bankers-rounding rounding

6
推荐指数
4
解决办法
2705
查看次数

在DNX项目中,我如何定位Xamarin Android?

TL; DR

我正在编写一个Xamarin.Android应用程序,并希望引用我的库的NuGet包,这是一个有目标的dotnetDNX类库.当我这样做时,编译器会发出警告

The type 'DateTime' is defined in an assembly that is not referenced. 
You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, ...
Run Code Online (Sandbox Code Playgroud)

IDE抱怨像这样的消息

Argument type 'System.DateTime [mscorlib, Version=2.0.5.0, Culture ...]' is
not assignable to parameter type 'System.DateTime [mscorlib, Version=4.0.0.0, ...]'
Run Code Online (Sandbox Code Playgroud)

虽然构建成功并且代码有效.我怎样才能在库/中更改它project.json

很长的故事

在工作中,我们目前正在将项目移植到project.json类型的(Package,DNX,无论名称是什么).目前,我们正在运行beta 7 Visual Studio集成,一般来说,一切正常.我现在想要在ASP.NET 5和Xamarin.Android项目(来自NuGet提要)中重用我们的模型库之一.

因为我们曾与在Xamarin项目针对.NET 4.5.1类库绝对没有运气我迁移模型库的DNX项目定位net45,dnx45以及dotnet(赞成dnxcore50,描述在这里),框架部分的project.json存在

"frameworks": {
  "net45": {
    "frameworkAssemblies": {
      "mscorlib": "4.0.0.0",
      "System.Xml": "4.0.0.0", …
Run Code Online (Sandbox Code Playgroud)

c# xamarin.android xamarin .net-core dnx

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

MongoDB:批量操作是否作为一个整体写入oplog?

当我在 MongoDB 3 中发出有序批量操作时,批量操作是否会作为一个整体写入 oplog,以便在服务器崩溃后可以作为一个整体重播?

这个问题的理由如下:

我知道没有真正的事务,但我可以使用$isolated关键字来获得一定的读取一致性(在某些情况下)。除了架构设计是否良好之外,我们假设我必须一次性更新可能不同集合中的多个文档,这将是 SQL 中的事务。我不关心数据在任何时刻都处于不一致状态,但我确实要求数据最终保持一致。因此,虽然我可能不关心操作期间的错误和丢失回滚,但我要求在某个时刻完全执行根本不执行更新序列,以便让它们在意外的服务器故障或中间关闭中幸存下来。批量操作(例如,由于随机 CoreOS 更新)。

mongodb mongodb-query

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