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:)哇,看起来很熟悉。