C# 我应该如何在Unity中注册这个具有参数化构造函数的类型?

C# 我应该如何在Unity中注册这个具有参数化构造函数的类型?,c#,.net,dependency-injection,tdd,unity-container,C#,.net,Dependency Injection,Tdd,Unity Container,我正在尝试注册一个具有构造函数方法的类型,如: public Foo (int myNumber, IBar bar) {...} 我通过Unity容器生成IBar实例。 我应该如何注册和解决Foo 关于下面的例子,我如何替换行newfoo。。。用统一的登记和解决办法 public interface IBar { public void SayNumber(); } public class Bar : IBar { public void SayNumber()

我正在尝试注册一个具有构造函数方法的类型,如:

public Foo (int myNumber, IBar bar) {...}
我通过Unity容器生成IBar实例。 我应该如何注册和解决Foo

关于下面的例子,我如何替换行newfoo。。。用统一的登记和解决办法

public interface IBar
{

  public void SayNumber();

}

public class Bar : IBar
{
    public void SayNumber()
    {
        Coonsole.Write("Number : ");
    }
}


public interface IFoo
{
    void int GetMyNumberTimesTwo();
    public int MyNumber{get;}
    public IBar Bar {get;}
}

public class Foo : IFoo
{

    private IBar _bar;
    private readonly int _myNumber;

    public Foo (int myNumber, IBar bar)
    {
        _myNumber = myNumber;
        _bar = bar;
    }

    public void GetMyNumberTimesTwo() {return _myNumber * 2; }
    public IBar { get{ return _bar; } }
}


public static void Main(string[] args)
{

     var container = new UnityContainer();
     container.RegisterType<IBar, Bar>();

     // QUESTION: So how should I Register and Resolve the container to achive 
       //  the line below? 

      IFoo f = new Foo(999, container.ResolveType<IBar>()); // This should be replaced upon your answer

     Console.WriteLine(f.Bar.SatNumber + f.GetMyNumberTimesTwo());
}
公共接口IBar
{
公共编号();
}
公共类酒吧:IBar
{
公众电话号码()
{
合作。写(“编号:”);
}
}
公共接口IFoo
{
void int GetMyNumberTimesTwo();
公共整数MyNumber{get;}
公共IBar条{get;}
}
公共类Foo:IFoo
{
私人酒吧;
私有只读int_myNumber;
公共Foo(int myNumber,IBar bar)
{
_myNumber=myNumber;
_巴=巴;
}
public void GetMyNumberTimesTwo(){return\u myNumber*2;}
公共IBar{get{return\u bar;}}
}
公共静态void Main(字符串[]args)
{
var container=new UnityContainer();
container.RegisterType();
//问题:那么我应该如何注册和解析容器以实现
//下面的那一行?
IFoo f=new Foo(999,container.ResolveType());//回答时应替换此选项
Console.WriteLine(f.Bar.SatNumber+f.GetMyNumberTimesTwo());
}
将类型注册为

container.RegisterType<IFoo, Foo>(new InjectionConstructor(999, typeof(IBar)));
container.RegisterType(新的注入构造函数(999,typeof(IBar));

我是这样做的,但我不知道有什么区别:container.RegisterType(新的InjectionConstructor(999,新的ResolvedParameter());如果类型是一种快捷方式,它们实际上是等价的。当您想要解析为特定名称时,确实需要使用ResolvedParameter,但当您不需要名称时,可以使用其中任何一个。