簡體   English   中英

將連接字符串注入 DbContext

[英]Inject connection string to DbContext

我有無法修改的外部服務,但我只能向其添加新的類庫以達到其功能。 我的問題是我的類庫使用 EF->Repository->Service 和 IOC 容器,當我將我的庫附加到外部服務時它不起作用,因為該服務沒有定義連接字符串。 我發現我可以使用 Service Locator 在我的類庫中定義實現 IOC 容器:

internal class ServiceLocator
{
    static ServiceLocator()
    {
        Current = new DefaultServiceLocator();
    }

    public static IServiceLocator Current { get; }

    private sealed class DefaultServiceLocator : IServiceLocator
    {
        private readonly IKernel _kernel;  // Ninject kernel

        public DefaultServiceLocator()
        {
            _kernel = new StandardKernel();
            LoadBindings();
        }

        public T Get<T>()
        {
            return _kernel.Get<T>();
        }

        private void LoadBindings()
        {

            string name = ""; // connection string
            _kernel.Bind<DbContext>().ToConstructor(_ => new Entities(name));
            _kernel.Bind<IRegionService>().To<RegionService>();
            _kernel.Bind<IRegionRepository>().To<RegionRepository>();
            _kernel.Bind<IMapper>().ToConstant(AutoMapperConfig.Initialize());
        }
    }
}

我創建了自己的部分類來將連接字符串傳遞給構造函數:

public partial class Entities
{
    public Entities(string name)
        :base(name)
    {
    }
}

因為自動生成的類不允許傳遞連接字符串(我不想修改它):

public partial class Entities : DbContext
{
   public Entities()
    : base("name=Entities")
   {
   }
}

當我在調試模式下運行我的測試應用程序時,我看到它引用了自動生成的 DbContext 類,而不是我創建的這個類。 正如我之前所說,我不能修改外部服務來將連接字符串添加到 App.config 文件中。 請為我的問題提供任何可能的解決方案。 我對設計更改持開放態度。

看來,您的某些類期望Entities依賴項而不是DbContext 在這種情況下,Ninject 傾向於回退到隱式自綁定,並選擇具有可以解析的依賴項的構造函數(在這種情況下為默認值)。

試試這個綁定:

_kernel.Bind<Entities>().ToConstructor(_ => new Entities(name));

暫無
暫無

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

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