C# Unity使用构造函数解析接口

C# Unity使用构造函数解析接口,c#,unity-container,C#,Unity Container,我有以下代码: var container = new UnityContainer(); container.RegisterType<Service>(new ContainerControlledLifetimeManager()); class Class1{ public Class1(Service service){ service.Add("123"); } } class Class2{ public Class2(Service servi

我有以下代码:

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
  }
}
var container=newunitycontainer();
RegisterType(新的ContainerControlledLifetimeManager());
一班{
公共1级(服务){
服务。添加(“123”);
}
}
二级{
公共课2(服务){
var data=service.Get();//返回123
}
}
我有一项服务是单身。但我想使用构造函数注入:

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
   }
 }
var container=newunitycontainer();
RegisterType(新的ContainerControlledLifetimeManager());
一班{
公共一级(色情服务){
服务。添加(“123”);
}
}
二级{
公共类别2(iSeries服务){
var data=service.Get();//返回null
}
}
现在服务不再是单一的。为什么?如何更改代码以使其正常工作?
谢谢

您检查smthg时出错,因为此代码应按预期工作。 例如,我们可以

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

我发现问题出在哪里:
container.RegisterType(newcontainerControlledLifetimeManager());container.RegisterTypes(AllClasses.FromLoadedAssemblies(),WithMappings.FromMatchingInterface,WithName.Default)我需要加载所有依赖项。如何更改此代码?@bluray尝试更改行的顺序,如
container.RegisterTypes(AllClass.FromLoadedAssemblies(),WithMappings.FromMatchingInterface,WithName.Default);RegisterType(新的ContainerControlledLifetimeManager())
@bluray首先按照约定注册,然后注册您的特定类型以替换prevregistration@bluray如果我的帖子有助于解决你的问题,请检查它作为答案
123