Unity DI - разрешить интерфейс используя конструктор - PullRequest
0 голосов
/ 08 июня 2018

У меня есть этот код:

var container = new UnityContainer();
container.RegisterType<Service>(new ContainerControlledLifetimeManager());

class Class1{
  public Class1(Service service){
    service.Add("123");
  }
}

class Class2{
  public Class2(Service service){
    var data = service.Get(); // return 123
  }
}

У меня есть один сервис, который является singleton.Но я хотел бы добавить с помощью конструктора:

var container = new UnityContainer();
    container.RegisterType<IService, Service>(new ContainerControlledLifetimeManager());

class Class1{
   public Class1(IService service){
     service.Add("123");
   }
 }

 class Class2{
   public Class2(IService service){
     var data = service.Get(); // return null
   }
 }

Теперь сервис не синглтон.Зачем?Как изменить мой код, чтобы он работал правильно?Спасибо

1 Ответ

0 голосов
/ 08 июня 2018

Вы проверяете что-то неправильно, так как этот код должен работать как положено.Например, у нас может быть

class Class1
{
    public Class1(IService service)
    {
        service.Add("123");
    }
}

class Class2
{
    public Class2(IService service)
    {
        var data = service.Get(); // return NOT null
        Console.WriteLine(data);
    }
}

public interface IService 
{ 
    string Get();
    void Add(string item);
}

public class Service : IService 
{ 
    private string value;
    public string Get()=>value;
    public void Add(string item)=>value = item;
}

И мы можем проверить это с помощью:

var container = new UnityContainer();
container.RegisterType<IService, Service>(new ContainerControlledLifetimeManager());

var cl1 = container.Resolve<Class1>(); // here in ctor we are setting value to 123
var cl2 = container.Resolve<Class2>(); // here we will print it to console

Вывод:

123
...