解决实例 - Autofac

9

我正在尝试解决代码中的某个实例。

在应用程序启动时,我注册了一个类型。

static void Main()
{    
    var builder = new ContainerBuilder();
    builder.RegisterType<Foo>().As<IFoo>();
}

现在,我如何在代码中解决一个实例?
在StructureMAP中有一个静态对象ObjectFactory.GetInstance<IFoo>()
1个回答

15

阅读入门指南。它应该能帮助你入门。

首先,你需要寻找的是容器。像在这个简单的WinForms应用程序中一样从ContainerBuilder构建它:

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中手动解决第一个实例,就像我的上面的示例一样。

1
但是你必须在代码的某个地方解决这个最高层次的实例。类型在启动时(Global.asax)注册,然后您需要在代码的某个地方解决最高层次的实例。最后,我找到了一篇描述这个的文章。http://geekswithblogs.net/Sharpoverride/archive/2009/08/15/ioc-in-.net-part-1-autofac.aspx 你对这种方法有什么看法? - user137348
谢谢您的全面解释!它真的帮了我很多! - user137348
太好了,很高兴能提供帮助! - Peter Lillevold
我还有一个问题 :-) 如何解决托管一些WCF服务的Windows服务中的第一个实例? - user137348
@user137348:看看http://code.google.com/p/autofac/wiki/WcfIntegration吧。我还没有尝试过,但是当涉及到启动时,Windows服务应该与控制台应用程序非常相似。 - Peter Lillevold
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接