我有接口IRepository统一映射到类GenericRepository。
IOC.Container.RegisterType<IRepository, GenericRepository>();
(GenericRepository采用ObjectContext(实体框架上下文)来执行其数据操作)
问题是我需要GenericRepository的几个不同实例。 (我的解决方案中有几种实体框架模型)
在业务层逻辑的每个部分中,我需要解析IRepository并获取一个GenericRepository,该类已针对与业务层逻辑的那部分相对应的Model进行了初始化。
我需要某种方式来设置选项...我不知道这是否是我特有的问题,或者其他人是否也有。
有没有办法告诉Unity如何做到这一点?
注意:我希望不要将ObjectContext的实例作为参数传递给Resolve方法。如果这样做的话,我将无法达到存储库模式的目的(抽象数据层以便可以轻松进行单元测试)。
最佳答案
我认为这会起作用:
IOC.Container.RegisterType<IRepository, GenericRepository>("ModelOne",
new InjectionConstructor(new ModelOneEntities());
IOC.Container.RegisterType<IRepository, GenericRepository>("ModelTwo",
new InjectionConstructor(new ModelTwoEntities());
.....
IRepository modelOneRepository = IOC.Container.Resolve<IRepository>("ModelOne");
基本上,您为每个注册命名,并提供使它与众不同的构造函数参数。然后在解析时使用该名称(尽管我建议使用
const
值而不是魔术字符串)。关于c# - 在Unity中解决规则?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7000497/