我试图弄清楚如何在代码中的某个位置解析实例。
在应用程序启动时,我注册了一个类型
static void Main()
{
var builder = new ContainerBuilder();
builder.RegisterType<Foo>().As<IFoo>();
}
现在,我该如何解析代码中的某个实例?
在StructureMAP中,有一个静态对象
ObjectFactory.GetInstance<IFoo>()
最佳答案
阅读Getting Started。它应该让您开始。
首先,您要寻找的是container
。像下面这个简单的WinForms应用程序一样,通过ContainerBuilder
进行构建:
static void Main()
{
using (var container = builder.Build())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var mainForm = container.Resolve<MainForm>();
Application.Run(mainForm)
}
}
通常的想法是,您只需要解析第一个或最顶层的实例。容器将根据通过构造函数参数的依赖注入(inject)来创建所有其他实例。
如果在整个应用程序中都遵循DI模式,则启动时只需触摸一下容器即可。
如何解析最高实例,很大程度上取决于您要构建哪种类型的应用程序。如果它是一个Web应用程序,则ASP.Net integration和MVC integration将为您处理它。 (毕竟,ASP.Net中最顶层的实例是
Application
,这是我们无法控制的)。另一方面,如果是控制台应用程序或WinForms应用程序,则可以使用
Main
手动解析第一个实例,就像上面的示例一样。关于.net - 解析实例-Autofac,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2737139/