C# 是否可以通过编程方式获取调用对象类型?
它将旧式连接字符串转换为modelFirst连接字符串:C# 是否可以通过编程方式获取调用对象类型?,c#,C#,它将旧式连接字符串转换为modelFirst连接字符串: public static class ConnectionStringExtensions { public static string GetEntityConnectionString(this string connectionString, Type contextType) { var prefix = contextType.Namespace.Replace(contextType.Asse
public static class ConnectionStringExtensions
{
public static string GetEntityConnectionString(this string connectionString, Type contextType)
{
var prefix = contextType.Namespace.Replace(contextType.Assembly.GetName().Name, "");
if (prefix.Length > 0
&& prefix.StartsWith("."))
{
prefix = prefix.Substring(1, prefix.Length - 1);
}
if (prefix.Length > 1 && !prefix.EndsWith("."))
{
prefix += ".";
}
var csBuilder = new EntityConnectionStringBuilder
{
Provider = "System.Data.SqlClient",
ProviderConnectionString = connectionString,
Metadata = String.Format("res://{0}/{1}.csdl|"
+ "res://{0}/{1}.ssdl|"
+ "res://{0}/{1}.msl"
, contextType.Assembly.FullName
, prefix + contextType.Name)
};
return csBuilder.ToString();
}
}
这很有效。我的问题是当我称之为:
string connString = ConfigurationMananager.ConnectionStrings["name"].ConnectionString;
var dbContext = new MyDbContext(connString.ToEntityConnectionString(typeof(MyDbContext);
该调用看起来与实例化无关,然后将类型传递给扩展方法。有没有一种方法可以根据它被传递到的构造函数以编程的方式得到它呢?恐怕这是不可能的 您需要以某种方式将DbContext类型发送给该方法,或者将其转换为类中的常量 我不知道如何从方法内部获取调用方的类型,我认为这不是一个好主意。这将是该方法内部的附带效应。如果处理需要DbContext,那么它应该在方法签名中。如果你永远不会改变它,它应该是一个常数
您可以尝试使用“this.GetType()”或var dbContext=connString.GetEntityConnectionString(this.GetType())发送类型 为什么要创建一个扩展方法呢?为什么不将该代码放入
MyDbContext
的私有方法中,然后在构造函数中调用该方法呢?那么您的调用代码只需要是var dbContext=newmydbcontext(connString)
@ChrisDunaway我有多个上下文要处理,我计划用它创建一个nuget包,并在其他应用程序中使用它。由于它是一个扩展方法,因此,您的调用可以是var dbContext=connString.GetEntityConnectionString(this.GetType())@EricLemes我希望调用该方法而不向该方法传递任何内容。我更喜欢这个想法,而不是传递一个显式类型。但是我不知道我是否可以根据callI推断扩展方法中的类型,恐怕这是不可能的。您需要以某种方式将DbContext类型发送给该方法,或者将其转换为类中的常量。我不知道如何从方法内部获取调用方的类型,我认为这是一个糟糕的理想。这将是该方法内部的附带效应。如果处理需要DbContext,那么它应该在方法签名中。如果你永远不会改变它,它应该是一个常数。