C# 带AutoFac的MVC控制器通用注入
我对使用Autofac的DI还比较陌生,不知道是否可以做到以下几点 我想创建一个接收 注射型。 我不想要注入类型的实例,只需要它的 类型,它将是预期接口的实现 我还想将该泛型类型传递给ViewModel,但这完全是另一个主题,不过,如果有人能解决这两个问题,那就太好了C# 带AutoFac的MVC控制器通用注入,c#,generics,model-view-controller,controller,autofac,C#,Generics,Model View Controller,Controller,Autofac,我对使用Autofac的DI还比较陌生,不知道是否可以做到以下几点 我想创建一个接收 注射型。 我不想要注入类型的实例,只需要它的 类型,它将是预期接口的实现 我还想将该泛型类型传递给ViewModel,但这完全是另一个主题,不过,如果有人能解决这两个问题,那就太好了 public ContractorController<T> : Controller where T : IContractor{ public ViewResult New() {
public ContractorController<T> : Controller
where T : IContractor{
public ViewResult New() {
var vNewModel = new NewViewModel<T>();
return View(vNewModel);
}
}
但是我得到了以下错误
The Autofac service
'UI.Controllers.ContractorController`1'
representing controller
'ContractorManagement.UI.Controllers.ContractorController`1'
in path '/Contractor/New' has not been registered.
所以我想我可能找错人了。
谁能告诉我怎么不用拉就可以做到这一点
我的牙齿
谢谢你我不太清楚你为什么想要一个使用通用控制器的控制器。Mvc并不真正支持在控制器上使用泛型,或者至少会涉及到支持的路由路径。也许你可以提供更多关于该方法背后原因的信息 看起来,您需要一个支持针对不同类型的模型绑定的控制器。下一个问题是,这些类型在公共接口或基类中是否有所不同 如果是这种情况,请查看Mvc2。这将很好地与Autofac配合使用。这将允许在post或get上对类型进行模型绑定,从而允许您使用autofac注入服务
如果您想通过一个共同的基础来改变类型-支持各种具体的视图模型-那么请查看。有一个版本可以在MVC1和Mvc3中使用,现在MvcContrib for Mvc3有一个很好的示例应用程序。Mvc3的实现也更快-速度以前不是问题,它只是一个更有效的识别过程。也许这不是对您问题的直接回答,但这是我见过并使用过的唯一可能使用通用控制器的方法:
public abstract class ContractorControllerBase<T> : Controller where T : IContractor {
public ViewResult New() {
var vNewModel = new NewViewModel<T>();
return View(vNewModel);
}
}
public class FakeContractorController : ContractorControllerBase<FakeContractor> {
}
公共抽象类ContractorControllerBase:Controller其中T:IContractor{
public ViewResult New(){
var vNewModel=NewViewModel();
返回视图(vNewModel);
}
}
公共类FakeContractorController:ContractorController数据库{
}
public abstract class ContractorControllerBase<T> : Controller where T : IContractor {
public ViewResult New() {
var vNewModel = new NewViewModel<T>();
return View(vNewModel);
}
}
public class FakeContractorController : ContractorControllerBase<FakeContractor> {
}