c# - Register Generic Type in StructureMap Based On Concrete Type -
this similar question unity, applies structuremap instead.
i'm trying emulate behavior can configure in ninject, using unity instead.
i attempting utilize cached repository pattern, given next classes , interface:
public interface irepository<t> { t get(); } public class sqlrepository<t> : irepository<t> t : new() { public t get() { console.writeline("getting object of type '{0}'!", typeof(t).name); homecoming new t(); } } public class cachedrepository<t> : irepository<t> t : class { private readonly irepository<t> repository; public cachedrepository(irepository<t> repository) { this.repository = repository; } private t cachedobject; public t get() { if (cachedobject == null) { cachedobject = repository.get(); } else { console.writeline("using cached repository fetch '{0}'!", typeof(t).name); } homecoming cachedobject; } } basically, time application uses irepository<t>, should instance of cachedrepository<t>. within of cachedrepository<t> should fetch actual sql repository of sqlrepository<t>. in ninject, have accomplished using following:
ninjectmodule.bind(typeof(irepository<>)).to(tyepof(sqlrepository<>)).wheninjectedexactlyinto(tyepof(cachedrepository<>)); ninjectmodule.bind(typeof(irepository<>)).to(tyepof(cachedrepository<>)); in structuremap, have accomplished binding non-generic repository following:
x.for<iwidgetrepository>().use<cachedwidgetrepository>().ctor<iwidgetrepository>().is<sqlwidgetrepository>(); unfortunately, ctor method not come overload not take generic.
...ctor(typeof(irepository<>))... // not exist! ...ctor<irepository<>>()... // compiler error! i could register every possible instance manually:
x.for<irepository<widget>>().use<cachedrepository<widget>>().ctor<irepository<widget>>().is<sqlrepository<widget>>(); but not ideal.
edit: found stackoverflow question, reply appears out of date: structuremap no longer has typeinterceptor class inherit from, rather exposes iinterceptor interface, accepted reply in stackoverflow question isn't compatible here.
c# generics inversion-of-control ninject structuremap
No comments:
Post a Comment