使用DI和IoC的工厂方法

我熟悉这些模式,但仍然不知道如何处理以下情况: public class CarFactory { public CarFactory(Dep1,Dep2,Dep3,Dep4,Dep5,Dep6) { } public ICar CreateCar(type) { switch(type) { case A: return new Car1(Dep1,Dep2,Dep3); break; case B: return new Car2(Dep4,Dep5,Dep6); break; } } } 通常,问题在于需要注入的引用量。 当有更多的汽车时会更糟。 我想到的第一种方法是在工厂构造函数中注入Car1和Car2,但它违反工厂方法,因为工厂将始终返回相同的对象。 第二种方法是注入servicelocator但它的反模式到处都是。 怎么解决? 编辑: 替代方式1: public class CarFactory { public CarFactory(IContainer container) { _container = container; } public ICar CreateCar(type) { switch(type) { […]

如何捕获鼠标移动事件

我想在我的主窗体中捕获鼠标移动事件。 虽然我能够为主窗体连接MouseEventHandler ,但当光标位于UserControl或任何其他控件上时,事件不再触发。 如何确保始终保持鼠标位置。

用C#实现Hoey Shamos算法

好的,我现在从我当前的算法中获取正确的信息! 但是,要检查700,000个多边形,这太慢了! 上一期是固定的(My Line2D intersectsWith方法不正确) 现在这是确定我的瓶颈的问题! 该算法假设为O(nlog-n),因此它应该更快。 我的intersectsWith方法看起来不能更快,但我会发布它的代码,万一我错了 编辑:添加了IComparable接口 我读取线段交叉点的方法。 为了便于阅读,省略了一些代码。 public class Line2D : IComparable { public Line2D(XYPoints p1, XYPoints p2) { } public bool intersectsLine(Line2D comparedLine) { if ((X2 == comparedLine.X1) && (Y2 == comparedLine.Y1)) return false; if ((X1 == comparedLine.X2) && (Y1 == comparedLine.Y2)) return false; if (X2 == comparedLine.X1 && Y2 […]

如何通过GetComponent从另一个游戏对象中的另一个脚本访问变量?

我四处寻找,我无法让它发挥作用。 我想我只是不知道正确的语法,或者只是不完全掌握上下文。 我有一个BombDrop脚本,它包含一个public int。 我使用public static工作,但有人说这是一个非常糟糕的编程习惯,我应该学习封装。 这是我写的: BombDrop脚本: public class BombDrop : MonoBehaviour { public GameObject BombPrefab; //Bombs that the player can drop public int maxBombs = 1; // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Space)){ if(maxBombs > 0){ DropBomb(); //telling in console current bombs Debug.Log(“maxBombs = ” + maxBombs); […]

财产(没有额外处理)与公共领域

每当有关于Properties的可信度的问题时,我发现大多数讨论都是围绕函数/方法和属性进行的。 但我还想知道使用属性与相关私有字段直接与公共字段直接使用的令人信服的理由,包含最常见的获取/设置行为而没有其他处理,我的意思是这种方式 public string CustomerName; VS private string customerName; public string CustomerName { get{return customerName;} set(string value){this.customerName=value;} }

winforms ComboBox中的单个项目颜色?

我有一个困境,我有一个表格,其中包含许多combobox,其中包含在某些情况下可能无效/过期的信息/选项/项目。 我不能简单地从项目中删除过时的信息,但我确实希望在选项无效时给用户一个直观的线索。 我想在项目中着色(可能是红色)来表明它们是否及何时无效。 我不一定需要阻止用户选择无效选项,只是让他们在视觉上意识到他们正在这样做。 可以这样做吗? 你能 – 动态地 – 改变combobox的colo(u)r吗? 谢谢,

如何在C#中将日期格式转换为DD-MM-YYYY

如何在C#中将日期格式转换为DD-MM-YYYY? 我只是寻找DD-MM-YYYY格式而不是其他任何东西。

即使专注于另一个控件,如何更改listview选择的行backcolor?

我有一个程序,它使用条形码扫描仪作为输入设备,这意味着我需要将焦点保持在文本框上。 该程序具有listview控件,当扫描某个条形码时,我以编程方式选择其中一个项目。 我通过以下方式设置行的背景颜色: listviewitem.BackColor = Color.LightSteelBlue; 我尝试过的事情: listview.HideSelection设置为false 设置颜色后调用listview.Focus() listviewitem.Focused设置为true call listview.Invalidate call listview.Update() call listview.Refresh() 以上的不同组合 我还在计时器中进行了上述组合,以便在不同的线程上调用它们但仍然没有成功。 有任何想法吗? 更多信息: 这里的关键是控制焦点。 当我选择其中一个项目时, listview控件没有焦点 。 我通过这样做选择一个项目: listView1.Items[index].Selected = true; Focus始终位于文本框中。 电脑没有键盘或鼠标,只有条形码阅读器。 我有这个代码来关注文本框: private void txtBarcode_Leave(object sender, EventArgs e) { this.txtBarcode.Focus(); } 你需要有一个文本框添加该代码来模拟我的问题。

如何确保在双监视器方案中“附加”监视器上显示表单?

我有一个应用程序,其中有一个表单,我想在第二个屏幕上显示。 平均值如果应用程序在屏幕A上运行,当我单击菜单以显示表格时,它应显示在屏幕B上,如果应用程序在屏幕B上运行,当我点击菜单显示表格时,它应显示在屏幕A上。

Newtonsoft.JSON无法使用TypeConverter属性转换模型

我有一个C#MVC应用程序,它将数据作为JSON字符串存储在XML文档中,也存储在MySQL数据库表中。 最近我收到了在MySQL数据库字段中存储JSON字符串的要求,要通过Newtonsoft.Json转换为C#对象 ,所以我决定实现一个TypeConverter将JSON字符串转换为自定义C#模型。 不幸的是,当TypeConverter属性添加到我的C#Model时,我无法在我的解决方案中的任何地方使用以下命令来反序列化我的JSON字符串: JsonConvert.DeserializeObject(json); 删除属性可以解决问题但是这会阻止我将MySQL DB字段转换为自定义C#对象。 这是我添加了TypeConverter属性的C#模型 : using System.ComponentModel; [TypeConverter(typeof(FooConverter))] public class Foo { public bool a { get; set; } public bool b { get; set; } public bool c { get; set; } public Foo(){} } 这是我的TypeConverter类 : using Newtonsoft.Json; using System; using System.ComponentModel; public class FooConverter : TypeConverter { public […]