我正在使用Unity开发MVC4应用程序。我的架构是这样的。
public interface IRepositoy<T>
{
}
public class DataRepository<T>:IRepository
{
}
基本上这里T是模型。
然后再次
public interface IModel
{
//Property and methods
}
public class Mobile: IModel
所有模型类都继承自此接口。
现在统一我使用以下语法
RegisterType<IRepository<Mobile>, DataRepository<Mobile>>();
这就是问题所在。
我希望这个“Mobile”类依赖于请求URL。说移动页面是请求“移动”类将被注入,如果“相机”页面被请求将注入相机对象。
我可以使用if-else来做到这一点。但我正在寻找更复杂的方法,使代码更易于维护和健壮。我是Unity和DI的新手,所以不知道最好的方法。
你能帮忙吗?
答案 0 :(得分:0)
通过IoC了解依赖注入。基本上,你可以说我希望将一个类型为Mobile的IRepository注入我的MobileController:
public MobileController(IRepository<Mobile> repo) {}
但是,当我使用PersonController时,我想要一个IRepository或者输入Person:
public PersonController(IRepository<Person> repo) {}
然后使用IoC,您可以注册所有依赖项。所以你可以说,如果一个控制器要求一个类型为Mobile的IRepository,给它们一个类型为Mobile的DataRepository,但是如果一个控制器要求一个Person类型的IRepository,给它们一个Person类型的DataRepository。 Ninject和AutoFac是两种流行的选择。设置Ninject看起来像:
Bind<IRepository<Mobile>>().To<DataRepository<Mobile>>();
Bind<IRepository<Person>>().To<DataRepository<Person>>();
在AppStart中注册Ninject,你很高兴。
答案 1 :(得分:0)
我认为你正在以错误的方式看待它。
在这种情况下,您只需要一个产品控制器。您的基类实体将是Product,然后您将从模型中继承该类,例如Mobile,Desktop或其他类似的东西。检查EF继承: