【发布时间】:2012-10-10 13:46:34
【问题描述】:
我正在使用 LINQ to SQL 类 (DataContext) 连接到我的数据库。我有三个具有相同架构的数据库:Development、Staging 和 Live。我已经意识到,如果它们具有相同的模式,我可以使用相同的 DataContext 连接到它们——只需更改我传递给 DataContext 构造函数的连接字符串。我已经声明了一个接口,以便对创建 DataContext 的所有调用都通过它:
public interface IDataContextCreator
{
MyDataContext CreateDataContext();
}
现在我可以有这个接口的具体实现来连接到Development、Staging 或Live DB。
我现在想隐藏我的 DataContext 构造函数,以强制所有创建 DataContext 的调用都通过上述接口。如果我将 DataContext 的可访问性更改为 internal,我将无法在解决方案的其他项目中使用它。理想情况下,我希望将类可访问性修饰符保留为public,但将构造函数更改为internal。有没有办法在自动生成的类中做到这一点?这个问题还有其他解决方案吗?
谢谢。
编辑:
乔恩,你是对的,构造函数应该是internal。我的 数据层 中有这些,我不希望其他项目/层中的类访问这些构造函数。然而,他们应该只能使用接口创建 DataContext,然后使用创建的 DataContext - 因为它将在类级别上公开。
【问题讨论】:
-
为什么要将构造函数更改为 protected 而不是 internal?
-
@WiktorZychla - 我不认为这些是重复的,因为我关心的是 DataContext 的自动生成。如果我必须手动编辑这些,我只需将 DataContext 类保留为公共 (即供所有人使用),但保留构造函数
internal。跨度>
标签: c# visual-studio-2010 linq linq-to-sql