我目前使用 Autofac 进行简单的构造函数注入(inject),没有任何问题。但是我想知道的是如何在运行时解决依赖关系。下面的示例显示了我们可以导出文档的多种方式。通过简单的构造函数注入(inject),IExport 的具体实现在运行时解析。但是,需要做的是根据用户从下拉列表中选择的内容解决 IExport,这将在我的容器构建之后发生。是否有任何示例可以说明我如何实现这一目标?
Public interface IExport
{
void Run(string content);
}
public class PDFformat : IExport
{
public void Run(string content)
{
// export in pdf format
}
}
public class HTMLformat : IExport
{
public void Run(string content)
{
// export in html format
}
}
public class RTFformat : IExport
{
public void Run(string content)
{
// export in rtf format
}
}
public class HomeController : Controller
{
IExport Export;
public HomeController(IExport export)
{
Export = export;
}
public void ExportDocument(string content)
{
Export.Run(content);
}
}
如有任何帮助,我们将不胜感激。
最佳答案
你应该使用工厂:
public interface IExportFactory
{
IExport CreateNewExport(string type);
}
实现:
class ExportFactory : IExportFactory
{
private readonly IComponentContext container;
public ExportFactory(IComponentContext container)
{
this.container = container;
}
public IExport CreateNewExport(string type)
{
switch (type)
{
case: "html":
return this.container.Resolve<HTMLformat>();
// etc
}
}
}
注册:
builder.Register<IExportFactory>(
c=> new ExportFactory(c.Resolve<IComponentContext>()))));
builder.RegisterType<HTMLformat>();
builder.RegisterType<PDFformat>();
Controller :
public class HomeController : Controller
{
IExportFactory factory;
public HomeController(IExportFactory factory)
{
this.factory = factory;
}
public void ExportDocument(string content)
{
this.factory.CreateNew("html").Run(content);
}
}
关于c# - 运行时的 Autofac 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10717553/