簡體   English   中英

您如何實現通用工廠接口?

[英]How do you implement generic factory interface?

我正在使用DbContextScope 我正在嘗試實現以下通用接口:

namespace EntityFramework.DbContextScope.Interfaces {
    public interface IDbContextFactory {
        TDbContext CreateDbContext<TDbContext>() where TDbContext : class, IDbContext;
    }
}

目的是為以下功能提供我的實現:

namespace EntityFramework.DbContextScope {
    public class DbContextScope : IDbContextScope, IDisposable {
        public DbContextScope(IDbContextFactory dbContextFactory);
    }
}

我似乎無法弄清楚如何實現此接口並將其正確提供給DbContextScope。 我嘗試了一個通用實現:

public class MyDbContextContextFactoryGeneric : IDbContextFactory {
    TDbContext IDbContextFactory.CreateDbContext<TDbContext>() {
        Type type = typeof(TDbContext);
        if (type == typeof(MyDbContext)) {
            return new MyDbContext();
        }
        throw new NotImplementedException();
    }
}

但是我得到的錯誤是:“無法將類型'MyDBContext'隱式轉換為'TDbContext'”。

我嘗試了一個明確的實現:

public class MyDbContextContextFactory : IDbContextFactory<MyDBContext> {
    public MyDBContext Create() {
        return new MyDBContext();
    }
}

但是,當我嘗試將其傳遞給DbContextScope時,如下所示:

public class Test {
    public void PerformTest() {
        IDbContextFactory dbContextFactory = new MyDbContextContextFactory();
        using (DbContextScope scope = new DbContextScope(dbContextFactory)) {
            // Do stuff
        }
    }
}

我在使用行之前的行上收到錯誤:“無法將類型'MyDbContextContextFactory'隱式轉換為'EntityFramework.DbContextScope.Interfaces.IDbContextFactory'。存在顯式轉換(您是否缺少類型轉換?)“

我究竟做錯了什么?

我終於找到了正確的語法,並能夠使用通用方法解決它。

public class MyDbContextContextFactoryGeneric : IDbContextFactory {
    TDbContext IDbContextFactory.CreateDbContext<TDbContext>() {
        return typeof(TDbContext) == typeof(MyDbContext)
          ? new MyDbContext() as TDbContext
          : Activator.CreateInstance<TDbContext>();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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