我有以下代码:

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还要多的工作。

10-06 04:46