簡體   English   中英

帶有參數的Activator.CreateInstance-找不到子類類型的構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM