On Thursday, 21 August 2014 at 12:58:13 UTC, MarisaLovesUsAll
wrote:
I found a rough solution. It's not ideal and I still want to make autoinject, but it works.

mixin template Manager(T) {};
class Component {};
class Sprite:Component
{
    mixin Manager!Sprite;
};


1) How to make mixin inject automatic?

You could use this pattern:

interface Component {}
class ComponentImpl(T) {}
class Sprite : ComponentImpl!Sprite {}

It's not 100% automatic, but the duplication of "Sprite" is in
the same line. And it's not as easy to forget as a mixin,
especially when Component does declare methods that ComponentImpl
implements.

2) If it's impossible, how to use "mixin Manager;" without "!Sprite" ?
"mixin template Manager(this T) {};" isn't working.

You can use `typeof(this)` in Manager:

mixin template Manager()
{
     void someMethod(typeof(this) otherInstance) {}
}

Reply via email to