我有一个Web表单应用程序(myWebForms)
我有一个类库项目(myClassLibrary),其中有一个名为“ myClass”的类
WebForms引用myClassLibrary
我已将Autofac引用添加到Web窗体应用程序,设置了全局asax来解析“ myClass”等...
我可以看到,在后面的aspx代码中,为AutoFac添加的公共属性已由AutoFac正确实例化。
到目前为止,这一切都很棒,但是,我的实际项目比这要复杂得多,我需要做的是访问已解析的“ myClass” 从myClassLibrary内部
我该如何实现? (我是从Web表单项目中将容器注入myClass吗?还是以某种方式引用Web表单的全局属性,还是在myClassLibrary中再次构建容器?)
答案 0 :(得分:0)
首先,我建议您查看有关Web表单和快速入门的Autofac文档。我认为这样做可能会回答很多问题,尽管我知道很多。 DI很复杂,恐怕在这里仅提供“快速答案”可能会使您对正在发生的事情有错误的理解。
一般...
说您的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>
同样,文档和示例中涵盖了很多内容。虽然我知道有很多东西而且可能会让人不知所措,但我强烈建议您仔细阅读这些信息,因为从长远来看,它可以为您节省很多时间和痛苦。