簡體   English   中英

首先如何從遷移代碼中將依賴注入與Unity結合使用?

[英]How use Dependency Injection with Unity from Migration Code First?

我需要在Migrations \\ Configuration.cs中使用依賴項注入來從服務層播種值。 我使用Unity來做到這一點。 我的Unity容器在整個網站上都能正常工作,因為我通過Constructor類實例化了所有接口。 但是我無法在Configuration.cs文件中執行此操作,因為“代碼優先”使用空的構造函數。

這是我的代碼。 告訴我我做錯了什么?

internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
    {
        private IGenderService _genderService;

        public Configuration()
        {
            AutomaticMigrationsEnabled = false;

            using (var container = UnityConfig.GetConfiguredContainer())
            {
                var isRegister = container.IsRegistered<IGenderService>(); // Return true!
                _genderService = container.Resolve<IGenderService>();

                if (_genderService == null)
                    throw new Exception("Doh! Empty");
                else
                    throw new Exception("Yeah! Can continue!!");
            };
        }

        public Configuration(IGenderService genderService) // Cannot use this constructor because of Code First!!!
        {
            _genderService = genderService;
        }
}

_genderService始終為null,並且我以相同的方式收到此錯誤:

程序集“ Microsoft.Practices.Unity,版本= 3.5.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35”中的類型“ Microsoft.Practices.Unity.ResolutionFailedException”未標記為可序列化。

謝謝,

大衛

我不了解Unity,但是您的問題是常見的DI模式。

恕我直言,問題是您在配置ctor中將ioc容器傳遞給了

public Configuration()  {
  AutomaticMigrationsEnabled = false;
  using (var container = UnityConfig.GetConfiguredContainer())  {
        ....
  }

您應該使用CompositionRoot

public class Bootstrap {
  public void Register() {
     var container = new UnityContainer();
     container.RegisterType<IGenderService, GenderService>();
     container.RegisterType<Configuration>();

  }
}

internal sealed class Configuration:  {
  private IGenderService _genderService;
  public Configuration(IGenderService genderService) {
     _genderService = genderService;
  }
}

...
// resolving
var config = container.Resolve<Configuration>();

在后台,Unity容器首先構造一個GenderService對象,然后將其傳遞給Configuration類的構造函數。

暫無
暫無

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

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