如何解决使用AutoFac通过工厂解析通用类型
我有一家工厂可以创建和缓存不同类型的设置。
public ISetting<TSetting> Create<TSetting>() where TSetting : new()
{
... Returns new or cashed ISetting<TSetting>
}
此刻,我所有需要设置的类都注入了工厂本身。
public ApplicationSettingsViewModel(ISettingFactory settingFactory)
{
}
然后用来创建所需的设置类型的实例,出于种种原因,这不是一个好的方法(在测试过程中模拟开销,传递将被立即丢弃的对象等)。因此,我希望能够将设置本身直接注入到类中。
要实现此目的,DI(在我的情况下为Autofac)需要以某种方式知道如何使用工厂构造对象。这使我进入了Delegate Factories,它似乎支持了,但似乎也不尽然。
我在代表Create方法的工厂类中实现了一个委托。 接下来,按照文档中的建议将其添加到我的容器中。
builder.RegisterType<SettingFactory>();
到目前为止,这很好用,但是要在我的类中实际使用它,我需要依赖 SettingFactory.Factory ,然后可以使用它来做类似 factory.Create();的操作。 尽管这行得通,但注入工厂本身绝不是更好的选择。
builder.RegisterType<SettingFactory>().As<ISettingFactory>().SingleInstance();
首选方式是我能够依赖 ISettings ,并让AutoFac通过 ISettingFactory.Create
实例解决此问题。版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。