我有接口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/

10-12 02:04