C# CF2.0 - System.Activator 和内部类
我有一个包含实体集合的数据提供程序。 我只希望能够通过数据提供者创建一个新实体。
即,要创建一个新记录,我需要使用:
Entity entity = Provider.AddNew();
enity.set_Properties... etc
我的问题是,如果我将实体设置为“内部”,则 System.Activator 无法创建它们的实例。 我的每个数据提供程序都使用带有传递的实体的通用类型的基类。
因此,目前我的 AddNew() 方法包含以下内容:
public T AddNew()
{
T added = Activator.CreateInstance<T>();
this.Collection.Add(added);
return added;
}
如果我可以在数据提供程序命名空间之外手动实例化一个新实体,这显然不是世界末日,但考虑到无法保存它们,这似乎毫无意义,所以为什么要提供这样做的选择?
编辑:忘记提及我的所有提供者、实体等都位于同一命名空间中。
I've got a data provider that contains a collection of entities. I only want to be able to create a new entity through the data provider.
I.e, to create a new record I need to use:
Entity entity = Provider.AddNew();
enity.set_Properties... etc
My issue is that if I set my entities to Internal, System.Activator cannot create an Instance of them. Each of my Data Providers uses a Base class with the generic type of the entity passed through.
So at the moment my AddNew() method contains the following:
public T AddNew()
{
T added = Activator.CreateInstance<T>();
this.Collection.Add(added);
return added;
}
It's obviously not the end of the world if I can instantiate a new entity manually outside of the Data Provider namespaces, but it seems pointless considering there's no way to ever save them, so why give the option to do so?
EDIT: Forgot to mention that all my providers, entities, etc are in the same namespace.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不要使用激活器,它依赖于公共构造函数。 而是使用反射来查找无参数构造函数,然后调用它。 沿着这些思路:
Don't use the Activator, which relies on a public constructor. Instead use reflection to find the parameterless constructor and then call it. Something along these lines: