我有以下代码:
IOC.Container.RegisterType<IRepository, GenericRepository>
("Customers", new InjectionConstructor(new CustomerEntities()));
我想知道的是,是否在类型注册发生时调用
new CustomerEntities()
一次,或者是否每次解析IRepository(名称为“ Customers”)时都将创建一个新的CustomerEntities。如果不是后者,那么有没有办法使它更像代表一样工作? (因此,它每次解决都会产生一个新的吗?)
我发现以下代码:
IOC.Container.RegisterType<IRepository, GenericRepository>("Customers")
.Configure<InjectedMembers>()
.ConfigureInjectionFor<ObjectContext>
(new InjectionConstructor(new CustomerEntities()));
我不确定这样做是否可行,或者这只是做我的第一个代码段所做的旧方法。
任何建议都很好!
最佳答案
您在那里的代码运行一次-在注册时创建了一个CustomerEntities对象,该实例在以后解析的所有GenericRepository对象之间作为参数共享。
如果您要为GenericRepository的每个实例单独创建一个CustomerEntities实例,那很容易-只需让容器进行提升即可。在注册中,执行以下操作:
IOC.Container.RegisterType<IRepository, GenericRepository>("Customers",
new InjectionConstructor(typeof(CustomerEntities)));
这将告诉容器“在解析IRepository时,创建GenericRepository的实例。调用带有单个CustomerEntities参数的构造函数。通过容器解析该参数。
这应该可以解决问题。如果您需要在容器中进行特殊配置来解析CustomerEntities,则只需使用单独的RegisterType调用即可。
您显示的第二个示例是Unity 1.0中过时的API。不要使用它,它没有完成比现在使用RegisterType还要多的工作。