使用unity注入单例类中的接口依赖

时间:2018-03-26 12:15:02

标签: c# unity-container

到目前为止,Unity使用dependency injection除了在单例类中使用依赖项外,其工作正常。

我有一个静态类来访问数据库函数

public class DB
    {
        private static readonly Lazy<DB> lazy = new Lazy<DB>(() => new DB());
        public static DB Instance { get { return lazy.Value; } }

        private readonly IContactService _contactService;

        private DB() { }
        public DB(IContactService contactService)
        {

            _contactService = contactService;
        }
}

现在,问题IContactService取决于ContactService类,因为DB使用_contactService来进行网络服务调用。即使使用Unity将DB注册为单身人士,我也会_contactServicenull

注册数据库类

     _container = new UnityContainer();
     _container.RegisterSingleton<DB>();

1 个答案:

答案 0 :(得分:0)

将您的数据库类更改为:

public class DB {
  private readonly IContactService _contactService;

  public DB(IContactService contactService) {
    _contactService = contactService;
  }
  ...
}

无论您在哪里使用DB.Instance,都要将DB作为依赖项注入并使用它。或者使用Locator.Instance.Resolve<DB>()虽然使用ServiceLocator被视为反模式(取决于)。

由于您在DI容器中将DB注册为单例,因此容器始终在任何注入的位置返回相同的实例。您不需要在DB中编写代码以使其成为单例。