-
Notifications
You must be signed in to change notification settings - Fork 265
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MemoryPool doesn't allow to use backing factory with multiple params, e.g. PrefabResourceFactory #16
Comments
Spent some time to solve this problem. Right now in Extenject each of However, I came to the conclusion that the idea of using But if someone really need to pass parameters from memory pool to underlaying factory you can use something like that. |
Yep, that all makes sense. You can't use the same memory pool to share instances that are created using multiple different prefabs. One issue I see with your solution is that using code could pass different prefabs. Which might not be an issue if you're injecting it public class BulletFactory
{
readonly Dictionary<GameObject, IMemoryPool<Bullet>> _pools =
new Dictionary<GameObject, IMemoryPool<Bullet>>();
readonly DiContainer _container;
readonly MemoryPoolSettings _settings;
public BulletFactory(DiContainer container, MemoryPoolSettings settings)
{
_container = container;
_settings = settings;
}
public void Despawn(GameObject prefab, Bullet bullet)
{
_pools[prefab].Despawn(bullet);
}
public Bullet Spawn(GameObject prefab)
{
IMemoryPool<Bullet> pool;
if (!_pools.TryGetValue(prefab, out pool))
{
pool = _container.Instantiate<MonoMemoryPool<Bullet>>(
new object[] { _settings, new FuncFactory<Bullet>(() => _container.InstantiatePrefabForComponent<Bullet>(prefab))});
_pools.Add(prefab, pool);
}
return pool.Spawn();
}
}
public class FuncFactory<T> : IFactory<T>
{
readonly Func<T> _factoryMethod;
public FuncFactory(Func<T> factoryMethod)
{
_factoryMethod = factoryMethod;
}
public T Create()
{
return _factoryMethod();
}
} |
@svermeulen Hi , Can you explain how to use BulletFactory ? I can not use BindFactory<Bullet, BulletFactory> because BulletFactory is not inherit from PlaceholdFactory? |
In current implementation it seems impossible to create MonoMemoryPool and provide the prefab to use for the new object (like with PrefabResourceFactory or PrefabFactory).
Even when you are instantiating memory pool directly.
The text was updated successfully, but these errors were encountered: