我正在实施Ioc,我想确保一些事情是正确的。
RegisterInstance
,解析它时将始终返回单例对象?但我想知道如何 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;
}
}
答案 0 :(得分:13)
如果您想要PerResolve实例化,则无法使用RegisterInstance
。使用RegisterInstance
将始终返回对象的相同实例(即注册实例的点)或使用RegisterType
并定义PerResolveLifetimeManager
。
RegisterInstance
使用ContainerControlledLifetimeManager
。 RegisterInstance
唯一的其他有意义的终身经理是ExternallyControlledLifetimeManager
。
TransientLifetimeManager
和PerResolveLifetimeManager
没有意义,因为每次调用Resolve
时这些生命周期都必须创建新实例。
PerThreadLifetimeManager
无用。