Dependency injection autofac";“你好,世界”;C#中的应用程序-初始化

Dependency injection autofac";“你好,世界”;C#中的应用程序-初始化,dependency-injection,inversion-of-control,autofac,Dependency Injection,Inversion Of Control,Autofac,我正在寻找一个简单的DI“Hello World”示例的帮助。我不明白的是如何在DI框架(autofac)中初始化类“Foo”和“Bar” 名称空间自动生成测试 { //这些类旨在与autofac/DI一起使用 公共接口IFooBar { 无效抽取(); } 公共类酒吧:IFooBar { 公众抽签() { Show(“在条形图中绘制某物”); } } 公共类Foo:IFooBar { 公众抽签() { Show(“在Foo中绘制somthing”); } } 公共部分类F

我正在寻找一个简单的DI“Hello World”示例的帮助。我不明白的是如何在DI框架(autofac)中初始化类“Foo”和“Bar”

名称空间自动生成测试
{
//这些类旨在与autofac/DI一起使用
公共接口IFooBar
{
无效抽取();
}
公共类酒吧:IFooBar
{           
公众抽签()
{
Show(“在条形图中绘制某物”);
}
}
公共类Foo:IFooBar
{
公众抽签()
{
Show(“在Foo中绘制somthing”);
}
}
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
var builder=new ContainerBuilder();
builder.RegisterType().As();
builder.RegisterType().As();
var container=builder.Build();
var taskController=container.Resolve();
taskController.Draw();
INTA=1;
}
}
}

我认为您的意思是希望将
Bar
Foo
类解析为具体实现,而不是实例化它。如果是这样,你可以写:

var builder = new ContainerBuilder();

builder.RegisterType<Bar>().Named<IFooBar>("Bar");
builder.RegisterType<Foo>().Named<IFooBar>("Foo");

var container = builder.Build();

var taskController = container.ResolveNamed<IFooBar>("Bar");

taskController.Draw();
var builder=newcontainerbuilder();
builder.RegisterType()。命名为(“Bar”);
builder.RegisterType()。命名为(“Foo”);
var container=builder.Build();
var taskController=container.ResolveNamed(“Bar”);
taskController.Draw();
我也意识到这是一个hello world应用程序,但要小心不要失败(即到处使用contain.Resolve)。取而代之的是,考虑设计允许所有的注册和解析发生在同一个地方,名为“./P>”。 我提到这一点是因为具有这种级别的模糊性(即为给定接口注册多个concreate类型)可能会导致用户开始使用服务定位器模式。相反,在更复杂的应用程序中,考虑重构API以解决注册类型时的模糊性。

var builder = new ContainerBuilder();

builder.RegisterType<Bar>().Named<IFooBar>("Bar");
builder.RegisterType<Foo>().Named<IFooBar>("Foo");

var container = builder.Build();

var taskController = container.ResolveNamed<IFooBar>("Bar");

taskController.Draw();