我正在试图弄清楚如何在代码中的某处解析实例。
在应用程序启动时,我注册了一个类型
static void Main()
{
var builder = new ContainerBuilder();
builder.RegisterType<Foo>().As<IFoo>();
}
现在,我如何在代码中的某处解析实例?
在StructureMAP中有一个静态对象ObjectFactory.GetInstance<IFoo>()
答案 0 :(得分:13)
阅读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)
}
}
一般的想法是你只需要解析第一个或最顶层的实例。容器将根据构造函数参数的依赖注入来处理创建所有其他实例。
如果在整个应用程序中遵循DI模式,则只需在启动时触摸容器一次。
如何解决最顶层的实例在很大程度上取决于您正在构建的应用程序类型。如果是一个网络应用,ASP.Net integration和MVC integration会为您处理。 (毕竟,ASP.Net中最顶层的实例是Application
,这是我们无法控制的。)
另一方面,如果它是一个控制台应用程序或WinForms应用程序,您将在Main
中手动解析第一个实例,就像上面的示例一样。