类库中的Autofac解析

时间:2019-01-28 17:04:32

标签: asp.net .net dependency-injection autofac class-library

我有一个Web表单应用程序(myWebForms)

我有一个类库项目(myClassLibrary),其中有一个名为“ myClass”的类

WebForms引用myClassLibrary

我已将Autofac引用添加到Web窗体应用程序,设置了全局asax来解析“ myClass”等...

我可以看到,在后面的aspx代码中,为AutoFac添加的公共属性已由AutoFac正确实例化。

到目前为止,这一切都很棒,但是,我的实际项目比这要复杂得多,我需要做的是访问已解析的“ myClass” 从myClassLibrary内部

我该如何实现? (我是从Web表单项目中将容器注入myClass吗?还是以某种方式引用Web表单的全局属性,还是在myClassLibrary中再次构建容器?)

1 个答案:

答案 0 :(得分:0)

首先,我建议您查看有关Web表单和快速入门的Autofac文档。我认为这样做可能会回答很多问题,尽管我知道很多。 DI很复杂,恐怕在这里仅提供“快速答案”可能会使您对正在发生的事情有错误的理解。

一般...

  • 您可以使用Autofac注册要注入的类型。这包括您的Web表单需要的所有类型以及这些类型需要的所有依赖项
  • Autofac通过其集成将解决依赖关系并将其放入您的Web表单中。如果这些对象具有依赖项(例如,构造函数参数),则Autofac会自动找出它们并将其插入。

说您的Web表单需要一个名为IEmailSender ...的属性。

public IEmailSender EmailSender { get; set; }

您的电子邮件发件人对象可能还需要其他一些依赖,例如网络套接字工厂或其他东西。

public EmailSender(ISocketFactory socketFactory)

您将在容器中都注册这两个。 它们来自哪个程序集无关紧要。您必须将它们注册到Autofac容器中才能工作。

builder.RegisterType<EmailSender>().As<IEmailSender>();
builder.RegisterType<TcpFactory>().As<ISocketFactory>();

当您的Web表单获得IEmailSender时,Autofac将首先解析TcpFactory,然后在EmailSender的构造函数中提供它,然后将其移交给您的Web表单。 / p>

同样,文档和示例中涵盖了很多内容。虽然我知道有很多东西而且可能会让人不知所措,但我强烈建议您仔细阅读这些信息,因为从长远来看,它可以为您节省很多时间和痛苦。