首页 > 解决方案 > 使用 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的实例解决此问题

标签: c#.netdesign-patternsdependency-injectionautofac

解决方案


推荐阅读