我试图弄清楚如何在代码中的某个地方解析一个实例。
在应用程序启动时,我注册了一个类型
static void Main()
{
var builder = new ContainerBuilder();
builder.RegisterType<Foo>().As<IFoo>();
}
现在,我怎样才能在代码中的某个地方解析一个实例?
在 StructureMAP 中有一个静态对象ObjectFactory.GetInstance<IFoo>()
阅读入门。它应该让你开始。
首先,您要查找的是container
. ContainerBuilder
在这个简单的 WinForms 应用程序中构建它:
static void Main()
{
using (var container = builder.Build())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var mainForm = container.Resolve<MainForm>();
Application.Run(mainForm)
}
}
一般的想法是你只需要解决第一个或最顶层的实例。容器将通过构造函数参数处理基于依赖注入的所有其他实例的创建。
如果整个应用程序都遵循 DI 模式,那么您应该只需要在启动时触摸一次容器。
您如何解决最顶层的实例很大程度上取决于您正在构建的应用程序类型。如果它是一个 Web 应用程序,ASP.Net 集成和MVC 集成将为您处理它。(毕竟,ASP.Net 中最顶层的实例是Application
我们无法控制的)。
另一方面,如果它是控制台应用程序或 WinForms 应用程序,您将手动解析第一个实例Main
,就像我上面的示例一样。