c# - Getting type of generic from interface -
in method whatgenerictypeiam want information implemention not abstraction of generic, see "person" not "abstractmodel" there way or not possible , need redesign?
public class program { private static void main(string[] args) { var container = new containerbuilder(); container.registertype<somea>(); container.registertype<mydependency>().as<imydependency<person>>(); // generic t person var buildedcontainer = container.build(); var somebase = buildedcontainer.resolve<somea>(); somebase.sayname(); console.readkey(); } } public interface imydependency<in t> { void whatgenerictypeiam(); } public class mydependency : imydependency<abstractmodel> { private string objectname = typeof (abstractmodel).name; public void whatgenerictypeiam() { console.writeline("my generic type " + objectname ); // shows "abstractmodel" want see "person" } } public abstract class abstractmodel // implemented not person { } public class person : abstractmodel { } public abstract class somebaseclass<t> t : abstractmodel { private readonly imydependency<person> _mydependency; public somebaseclass(imydependency<person> mydependency) // generic t person { _mydependency = mydependency; } public void sayname() { _mydependency.whatgenerictypeiam(); } } public class somea : somebaseclass<person> { public somea(imydependency<person> mydependency) : base(mydependency) { } } @brentworden hmm don't it, have , it's same problem
namespace consoleapplication1 { public class program { private static void main(string[] args) { var container = new containerbuilder(); container.registertype<somea>(); container.registertype<someb>(); container.registertype<mydependency<abstractmodel>>().as<imydependency>(); // generic t person var buildedcontainer = container.build(); var somebase = buildedcontainer.resolve<somea>(); somebase.sayname(); console.readkey(); } } public interface imydependency { void whatgenerictypeiam(); } public class mydependency<t> : imydependency { private string objectname = typeof (t).name; public void whatgenerictypeiam() { console.writeline("my generic type " + objectname ); // shows "abstractmodel" want see "person" } } public abstract class abstractmodel // implemented not person { } public class person : abstractmodel { } public class otherperson : abstractmodel { } public abstract class somebaseclass<t> t : abstractmodel { private readonly imydependency _mydependency; public somebaseclass(imydependency mydependency) // generic t person or otherperson { _mydependency = mydependency; } public void sayname() { console.writeline("my name " + typeof(t)); // want in _mydependency _mydependency.whatgenerictypeiam(); } } public class somea : somebaseclass<person> { public somea(imydependency mydependency) : base(mydependency) //mydependency t person { } } public class someb : somebaseclass<otherperson> { public someb(imydependency mydependency) : base(mydependency) //mydependency t otherperson { } } }
the mydependency class must declared generic class. can use type of generic wish:
public class mydependency<t> : imydependency<t> { private string objectname = typeof(t).name; public void whatgenerictypeiam() { console.writeline("my generic type " + objectname); } } the way have now, mydependency statically typed abstractmodel.
Comments
Post a Comment