[英]Activator.CreateInstance with param - constructor of child class type not found
我嘗試將connectionString傳遞給上下文工廠構造函數,但出現錯誤“找不到ContextImplementationTest的構造函數類型”是什么問題? 我打電話
string bid="someCOnnectionString";
using (BaseContext<DbContext> db = MediaDbContext.GetBidContext(bid)){...}
public static class MediaDbContext
{
public static BaseContext<DbContext> GetBidContext(string connString)
{
//Settings.ContextFactory="ContextImplementationTest"
Type contextFactoryType = Type.GetType("Media.DB.Context.Implementation." + Settings.ContextFactory);
object[] args = new object[] { connString};
BaseContext<DbContext> instance = (BaseContext<DbContext>)Activator.CreateInstance(contextFactoryType, args);
return instance;
}
}
基類
public class BaseContext<TContext> : DbContext where TContext : DbContext
{
static BaseContext()
{
Database.SetInitializer<TContext>(null);
}
protected BaseContext(string connectionString) : base(connectionString)
{
}...
兒童班
public class ContextImplementationTest : BaseContext<DbContext>
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{...}
更新:要在子類中調用構造函數,您需要在此類中具有構造函數。
兒童班
public class ContextImplementationTest : BaseContext<DbContext>
{
protected ContextImplementationTest(string connectionString) : base(connectionString)
{
}...
僅在默認構造函數調用的情況下, Activator.CreateInstance才采用nonPublic
參數。
您可以改用Type.GetConstructor :
Type contextFactoryType =
Type.GetType("Media.DB.Context.Implementation." + Settings.ContextFactory);
ConstructorInfo ci = contextFactoryType .GetConstructor(
BindingFlags.Instance | BindingFlags.NonPublic,
binder: null, new Type[] { typeof(string) }, modifiers: null);
object[] args = new object[] { connString };
var instance = (BaseContext<DbContext> instance)ci.Invoke(args);
return instance;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.