我正在开发一个小型实用程序Winforms应用程序。它只是转换加载到内存的文件。没有数据库。
有一个表示该文件的有状态类。它基本上是应用程序的数据源代替数据库。此类中的数据需要通过应用程序中的几种不同形式进行读取/修改。
我应该如何构建此应用程序以确保表单可以轻松地与该类进行通信。我的主表单可以简单地将对象传递给它的子表单,还是那种不好的做法?还有更好的选择吗?
由于
答案 0 :(得分:2)
将应用程序状态对象的实例传递给子表单是可以接受的。
或者,您可以使用Singleton Pattern编写州级类,以便将其实例化一次(并且只执行一次)。
public class MyState
{
// private constructor to stop others from instantiating the object
private MyState() { }
private static MyState instance;
public static MyState Instance
{
get
{
if (instance == null)
{
instance = new MyState();
}
return instance;
}
}
// Insert the class' methods/properties here as public, non-static
}
您还可以使用Dependency Injection库为子表单提供州级。我喜欢Autofac,但还有很多其他人。
最终,最佳做法是编写适合您应用程序需求的代码。
答案 1 :(得分:0)
最简单的方法就是在Static Accessor类上提供对整个应用程序的类的访问,如下所示:
public static class AppObjects
{
private static MyClass _myClass;
public static GetMyClass()
{
if(_myClass == null)
{
//Init/Load Object
}
return _myClass
}
}
也就是说,让父表单将对象传递给它的子表单并不可怕。如果您希望更改相关内容(如UI结构或所需对象数),则只需使用更复杂的解决方案。
答案 2 :(得分:0)
您可以创建一个简单的实例存储库。这样做的逻辑是您可以从集合中检索安装,还应该提供添加实例的添加方法。
样本将是
private List<object> _instanceRepo;
public TInstance Retrieve<TInstance>()
{
TInstance response = default(TInstance);
object retrieved = _instanceRepo.FirstOrDefault(x => x.GetType() == typeof(TInstance));
if (retrieved == null)
Console.WriteLine("retrieved object was null.");
else
response = (TInstance)retrieved;
return response;
}
或创建单例,这是通过创建暴露单个实例的类的静态属性来实现的。