使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...