C# 如何构造映射配置?

C# 如何构造映射配置?,c#,inversion-of-control,structuremap,C#,Inversion Of Control,Structuremap,关于“法语”和“英语”作为依赖注入,我该怎么办 class Program { static void Main(string[] args) { IContainer container = ConfigureDependencies(); IAppEngine appEngine = container.GetInstance<IAppEngine>(); IGeeter g1 = container.GetIn

关于“法语”和“英语”作为依赖注入,我该怎么办

class Program
{
    static void Main(string[] args)
    {
        IContainer container = ConfigureDependencies();

        IAppEngine appEngine = container.GetInstance<IAppEngine>();

        IGeeter g1 = container.GetInstance<IGeeter>("Franch");
        IGeeter g2 = container.GetInstance<IGeeter>("English");

        appEngine.Run();



    }

    private static IContainer ConfigureDependencies()
    {


        return new Container(x =>
            {                    
                x.For<IGeeter>().Add<FrenchGreeter>().Named("Franch");
                x.For<IGeeter>().Add<EnglishGreeter>().Named("English"); 

                x.For<IAppEngine>().Use<AppEngine>(); 

                x.For<IGeeter>().Use<EnglishGreeter>();
                x.For<IOutputDisplay>().Use<ConsoleOutputDisplay>();

            });
    }

}

public interface IAppEngine
{
    void Run();
}

public interface IGeeter
{
    string GetGreeting();
}
public interface IOutputDisplay
{
    void Show(string message);
}

public class AppEngine : IAppEngine
{
    private readonly IGeeter english;
    private readonly IGeeter franch;
    private readonly IOutputDisplay outputDisplay;

    public AppEngine(IGeeter english,IGeeter franch, IOutputDisplay outputDisplay)
    {
        this.english = english;
        this.franch = franch;
        this.outputDisplay = outputDisplay;

    }

    public void Run()
    {
        outputDisplay.Show(greeter.GetGreeting());
    }
}

public class EnglishGreeter : IGeeter
{
    public string GetGreeting()
    {
        return "Hello";
    }
}

public class FrenchGreeter : IGeeter
{
    public string GetGreeting()
    {
        return "Bonjour";
    }
}
类程序
{
静态void Main(字符串[]参数)
{
IContainer容器=配置依赖项();
IAppEngine appEngine=container.GetInstance();
IGeeter g1=container.GetInstance(“Franch”);
IGeeter g2=container.GetInstance(“英语”);
appEngine.Run();
}
专用静态IContainer配置依赖项()
{
返回新容器(x=>
{                    
x、 For().Add().Named(“法郎”);
x、 For().Add().Named(“英语”);
x、 For().Use();
x、 For().Use();
x、 For().Use();
});
}
}
公共接口IAppEngine
{
无效运行();
}
公共接口测试器
{
字符串GetGreeting();
}
公共接口IOutputDisplay
{
无效显示(字符串消息);
}
公共类AppEngine:IAppEngine
{
私人只读英语;
私人自愿者法郎;
专用只读IOutputDisplay输出显示;
公共外观(IGeeter英语、IGeeter法语、IOutputDisplay)
{
英语=英语;
这个。法郎=法郎;
this.outputDisplay=outputDisplay;
}
公开募捐
{
outputDisplay.Show(greeter.GetGreeting());
}
}
公共课英语教师:伊格特
{
公共字符串GetGreeting()
{
回复“你好”;
}
}
公共舱法国迎宾员:伊盖特
{
公共字符串GetGreeting()
{
返回“你好”;
}
}

由于法国迎宾员和英国迎宾员的合同相同,StructureMap将不知道使用哪种。对于每一次接线,每个合同只使用一个实例。试着这样做:

For<IGreeter>().Use<FrenchGreeter>().Named("French");
For<IGreeter>().Use<EnglishGreeter>().Named("English");
For<IAppEngine>().Use<AppEngine>()
  .Ctor<IGreeter>("French").Is(x => x.TheInstanceNamed("French"))
  .Ctor<IGreeter>("English").Is(x => x.TheInstanceNamed("English"));
For().Use().Named(“法语”);
For().Use().Named(“英语”);
For().Use()
.Ctor(“法语”).Is(x=>x.TheInstanceNamed(“法语”))
.Ctor(“英语”).Is(x=>x.TheInstanceNamed(“英语”);

你的回答很有帮助。谢谢。@Yeon Chul Kim:如果你觉得答案有帮助,那就投弃权票。如果你认为这是正确的答案,请将其标记为正确答案。欢迎来到Stack Overflow:)哇,看起来很熟悉。