到目前为止,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注册为单身人士,我也会_contactService
为null
。
注册数据库类
_container = new UnityContainer();
_container.RegisterSingleton<DB>();
答案 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中编写代码以使其成为单例。