我正在尝试在LINQPad中测试一些代码。但是,base
类调用Configuration Manager。在LINQPad中进行测试时,如何模拟它。
void Main()
{
var tRepo = new TestRepository();
var result = tRepo.GetAsync(1);
result.Dump();
}
public partial class TestRepository : BaseRepository<Customer>, ICustomerRepository
{
// Here base throws the errror
public TestRepository() : base("DbConnString")
{
}
}
这是BaseRepository的构造函数(来自已编译的DLL,因此在LINQPad中不可编辑):
protected BaseRepository(string connectionStringName)
{
var connectionString = ConfigurationManager.ConnectionStrings[connectionStringName];
Connection = new SqlConnection(connectionString.ConnectionString);
Connection.Open();
}
答案 0 :(得分:10)
答案可以在LinqPad网站上找到答案
http://www.linqpad.net/faq.aspx
我正在引用一个从应用程序配置文件(app.config)读取设置的自定义程序集。我应该在哪里放置我的应用程序配置文件,以便LINQPad查询将其获取?
在与LINQPad.exe相同的文件夹中创建名为linqpad.config的文件,并将配置数据放在那里。不要将此与linqpad.exe.config混淆:
•linqpad.exe.config用于LINQPad GUI
•linqpad.config适用于您的查询。
答案 1 :(得分:2)
可能对你有用的东西,我是在不久前创建的。
这是一种扩展方法,可用于强制从特定文件重新加载配置。它使用反射来更改管理器中的私有字段,清除配置,然后有条件地重新加载它。它比手动编辑LINQPad的配置文件容易得多。
public static void ForceNewConfigFile(this Type type, bool initialize = true)
{
var path = type.Assembly.Location + ".config";
if (!File.Exists(path))
throw new Exception("Cannot find file " + path + ".");
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
var typeOfConfigManager = typeof(ConfigurationManager);
typeOfConfigManager.GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, 0);
typeOfConfigManager.GetField("s_configSystem", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, null);
var typeOfClientConfigPaths = typeOfConfigManager.Assembly.GetTypes().Where(x => x.FullName == "System.Configuration.ClientConfigPaths").Single();
typeOfClientConfigPaths.GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, null);
if (initialize)
{
var dummy = ConfigurationManager.AppSettings;
}
}
使用示例:
typeof(SomeType).ForceNewConfigFile();
System.Configuration.ConfigurationManager.AppSettings.Dump();
SomeType
只是程序集中包含的类型,它将用作配置文件位置的源。假设是:配置文件存在于DLL文件旁边,名为{Assembly.Location}.config
。