设置此设置:
Page1:
- Component A
- Component B
Page2:
- Component C
- Component D
Service: MyService
我希望组件A和B获得相同的MyService实例。
组件C和D应该获得MyService的新的(和相同的)实例。
当我将MyService注册为transient
时,每个组件都会获得一个新的实例。
当我注册为singleton
/ scoped
时,所有组件共享相同的实例。
组件是库的一部分,因此我正在寻找在消耗方面不需要或需要很少工作的解决方案。
如何完成?
似乎没有内置的方法来处理它。所以我去了单例工厂,并将其链接到NavigationManager。
public class MyServiceFactory
{
private NavigationManager _navigationManager;
private Dictionary<string, MyService> _state = new Dictionary<string, MyService>();
public MyServiceFactory(NavigationManager navigationManager)
{
_navigationManager = navigationManager;
_navigationManager.LocationChanged += (s, e) =>{
_state.Remove(_state.Keys.Single(x => x != e.Location));
};
}
public MyService Get()
{
if(!_state.ContainsKey(_navigationManager.Uri))
{
_state.Add(_navigationManager.Uri, new MyService());
}
return _state[_navigationManager.Uri];
}
}
}