c# - 使用 AutoFac 通过工厂解析泛型类型
问题描述
我有一个创建和缓存不同类型设置的工厂。
public ISetting<TSetting> Create<TSetting>() where TSetting : new()
{
... Returns new or cashed ISetting<TSetting>
}
目前,我所有需要设置的类都注入了工厂本身。
public ApplicationSettingsViewModel(ISettingFactory settingFactory)
{
}
然后使用它们来创建他们需要的设置类型的实例,这有几个原因不是一个好的方法(在测试期间模拟开销,传递将立即删除的对象等)。出于这个原因,我希望能够将设置本身直接注入到类中。
为了做到这一点,DI(在我的例子中是 Autofac)需要以某种方式知道如何使用工厂构造对象。这使我找到了它似乎支持的代理工厂,但似乎也不是我所追求的。
我在代表 Create 方法的工厂类中实现了一个委托。接下来,我按照文档中的建议将其添加到我的容器中。
builder.RegisterType<SettingFactory>();
到目前为止,这很好用,但要在我的类中实际使用它,我需要依赖SettingFactory.Factory,然后可以使用它来执行类似factory.Create();之类的操作。 虽然这可行,但它绝不比注入工厂本身更好。
builder.RegisterType<SettingFactory>().As<ISettingFactory>().SingleInstance();
首选方法是我能够依赖ISettings并让 AutoFac 通过ISettingFactory.Create的实例解决此问题
解决方案
推荐阅读
- sql - 使用时间戳列在 postgresql 上联合加入
- android - 如何让 Android AlarmManager 执行 setWindow 但在空闲时允许?
- javascript - 使用 Firebase 获取用户事件(多对多关系)
- firebase - 为什么我的数据点没有放置在图表中的相应位置?
- python - Python Pexpect 属性错误。'NoneType' 没有属性 'sendline'
- javascript - 为什么这个 javascript/jquery 不捕获用户输入?
- php - PHP访问父类函数变量
- java - 在参数之前和之后分配实例变量有什么区别?
- javascript - 从节点中的数据库返回多行
- windows - 如何在 Windows os 7 中从命令行运行因子文件?