[英]Hiding the Constructors of LINQ to SQL DataContext
我正在使用LINQ to SQL Classes ( DataContext )连接到我的数据库。 我有三个具有相同模式的数据库: Development
, Staging
和Live
。 我已经意识到,如果它们具有相同的模式,我可以使用相同的DataContext连接到它们 - 只需更改我传入DataContext构造函数的连接字符串。 我已声明了一个接口,以便所有对DataContext创建的调用都通过它:
public interface IDataContextCreator
{
MyDataContext CreateDataContext();
}
现在我可以让这个界面的概念实现连接到Development
, Staging
或Live
DB。
我现在想隐藏我的DataContext构造函数以强制所有对DataContext创建的调用都通过上面的接口。 如果我将DataContext的可访问性更改为internal
,我不能在解决方案中的其他项目中使用它。 理想情况下,我希望将类可访问性修饰符保持为public
但将构造函数更改为internal
。 有没有办法在自动生成的类中执行此操作? 这个问题还有其他解决办法吗?
谢谢。
编辑: Jon你是对的,构造函数应该是internal
。 我在我的数据层中有这些,我不希望其他项目/层中的类到达这些构造函数。 然而,他们应该只能够创建一个使用界面的DataContext,然后使用创建的DataContext的 -因为它是公共的一流水平。
您可以使用http://l2st4.codeplex.com/上的T4模板替换VS代码。 有了这个,您可以修改构造函数代码spit以保护而不是公共。
但是,我不得不想知道为什么要使用单独的数据上下文,而不仅仅是更改配置文件中的连接信息,并使用转换为特定的构建操作提取适当的连接字符串。 请参阅http://msdn.microsoft.com/en-us/library/dd465326.aspx
您可以将构造函数声明为protected。
public class MyDataContext : DataContext {
protected MyDataContext() {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.