IoC - Unity,RegisterInstance如何工作,我是对的吗?

时间:2011-03-22 16:21:23

标签: .net singleton unity-container ioc-container

我正在实施Ioc,我想确保一些事情是正确的。

  1. 如果我使用RegisterInstance,解析它时将始终返回单例对象?
  2. BootStrapper将加载到 Global.asax 或最初将加载的地方,这意味着所有实例都将是单例?
  3. 但我想知道如何 1.每个解析创建一个单独的实例,PerResolve不能与RegisterInstance一起使用,它只适用于RegisterType 2.如果我将依赖对象作为静态属性,它将以相同的方式工作,如果我能够为每个解析创建单独的实例?

    请帮帮忙?

    public class ClientUser : UserServiceBase, IClientUser
    {
        private  IDataServiceManager _dataServiceManager;
        public ClientUser()
        {
    
        }
    
        private IDataServiceManager DataServiceMgr
        {
            get
            {
                if (_dataServiceManager == null)
                    _dataServiceManager = ProjectContainer.Instance.Resolve<IDataServiceManager>();
    
                return _dataServiceManager;
            }
        }    
    

1 个答案:

答案 0 :(得分:13)

如果您想要PerResolve实例化,则无法使用RegisterInstance。使用RegisterInstance将始终返回对象的相同实例(即注册实例的点)或使用RegisterType并定义PerResolveLifetimeManager

默认情况下,

RegisterInstance使用ContainerControlledLifetimeManagerRegisterInstance唯一的其他有意义的终身经理是ExternallyControlledLifetimeManager

TransientLifetimeManagerPerResolveLifetimeManager没有意义,因为每次调用Resolve时这些生命周期都必须创建新实例。

在您不控制线程的情况下,

PerThreadLifetimeManager无用。