【问题标题】:Hiding the Constructors of LINQ to SQL DataContext隐藏 LINQ to SQL DataContext 的构造函数
【发布时间】:2012-10-10 13:46:34
【问题描述】:

我正在使用 LINQ to SQL 类 (DataContext) 连接到我的数据库。我有三个具有相同架构的数据库:DevelopmentStagingLive。我已经意识到,如果它们具有相同的模式,我可以使用相同的 DataContext 连接到它们——只需更改我传递给 DataContext 构造函数的连接字符串。我已经声明了一个接口,以便对创建 DataContext 的所有调用都通过它:

public interface IDataContextCreator
    {
        MyDataContext CreateDataContext();
    }

现在我可以有这个接口的具体实现来连接到DevelopmentStagingLive DB。

我现在想隐藏我的 DataContext 构造函数,以强制所有创建 DataContext 的调用都通过上述接口。如果我将 DataContext 的可访问性更改为 internal,我将无法在解决方案的其他项目中使用它。理想情况下,我希望将类可访问性修饰符保留为public,但将构造函数更改为internal。有没有办法在自动生成的类中做到这一点?这个问题还有其他解决方案吗?

谢谢。

编辑: 乔恩,你是对的,构造函数应该是internal。我的 数据层 中有这些,我不希望其他项目/层中的类访问这些构造函数。然而,他们应该只能使用接口创建 DataContext,然后使用创建的 DataContext - 因为它将在类级别上公开。

【问题讨论】:

  • 为什么要将构造函数更改为 protected 而不是 internal
  • @WiktorZychla - 我不认为这些是重复的,因为我关心的是 DataContext 的自动生成。如果我必须手动编辑这些,我只需将 DataContext 类保留为公共 (即供所有人使用),但保留构造函数 internal。跨度>

标签: c# visual-studio-2010 linq linq-to-sql


【解决方案1】:

您可以使用http://l2st4.codeplex.com/ 的 T4 模板替换 VS 代码生成器。有了这个,你就可以修改构造函数的代码,使其受到保护而不是公开。

但是,我想知道您为什么要使用单独的数据上下文,而不是仅仅更改配置文件中的连接信息并使用转换来为您的特定构建操作提取适当的连接字符串。见http://msdn.microsoft.com/en-us/library/dd465326.aspx

【讨论】:

  • 谢谢吉姆。我认为这是一个不错的选择。如果可能的话,我宁愿在属性中设置这些。我可以更改配置文件中的连接信息,但如果我可以即时更改,我也可以在测试中使用它;)。
【解决方案2】:

你可以将你的构造函数声明为受保护的。

public class MyDataContext : DataContext {
    protected MyDataContext() {
    }
}

【讨论】:

  • Visual Studio 为我创建了 DataContext,我不想编辑自动生成的文件——如果有办法的话。
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多