【发布时间】:2018-05-26 10:01:30
【问题描述】:
我有抽象的泛型类
public abstract class AbstractLogic<T> {}
还有两个实现
DefaultLogic : AbstractLogic<ClassA>{}
SpecificLogic : AbstractLogic<ClassB>{}
正如我们所看到的,如果我想创建其中一个的实例,我可以轻松地做到这一点,而无需指定开放的泛型类。
DefaultLogic logic= new DefaultLogic();
现在我需要在 DI 的帮助下创建它们中的每一个的实例。 所以,我注册了这样的类型
var logicList= new[]
{
Assembly.GetAssembly(typeof(DefaultLogic)),
Assembly.GetAssembly(typeof(SpecificLogic))
};
builder.RegisterAssemblyTypes(logicList).AsClosedTypesOf(typeof(AbstractLogic<>))
.Where(t => t.Name.StartsWith(Settings.GetCurrentMode().ToString()));
Settings.GetCurrentMode() - 返回我需要的实例名称(特定的默认值)。
不,我想将服务注入控制器以使其能够加载所需的逻辑服务。
public class ListController : Controller
{
private AbstractLogic<???> _logic;
public ListController(AbstractLogic<???> logic)
{
_logic = logic;
}
}
编译器要求我定义模型而不是???。但是,我不需要它,因为实现 ob 抽象类已经选择了一个开放的泛型类型而不是继承。还有其他方法如何使用 autofac 解决所需的逻辑?
【问题讨论】:
-
回答这个问题会有所帮助:stackoverflow.com/questions/37835441/…
-
谢谢,我觉得不一样...
-
您应该改用非泛型基类或接口。你的
ListController不在乎,所以它显然不应该是通用的。 -
@Steven 是对的。此外,如果编译器要求某些东西,Autofac 也无法帮助您解决这个问题。
标签: c# generics dependency-injection constructor autofac