class - C# Interface Method calls from a controller -


i working on application architecture , may sound stupid question please explain me how following works:

interface:

public interface imatterdal {     ienumerable<matter> getmattersbycode(string input);     ienumerable<matter> getmattersbysearch(string input); } 

class:

 public class matterdal : imatterdal {     private readonly database _db;      public matterdal(database db)     {         _db = db;         loadall(); //private method     }      public virtual ienumerable<matter> getmattersbysearch(string input)     {         //code         return result;     }      public virtual ienumerable<matter> getmattersbycode(string input)     {        //code         return results;     } 

controller:

public class mattercontroller : apicontroller {     private readonly imatterdal _publisheddata;      public mattercontroller(imatterdal publisheddata)     {         _publisheddata = publisheddata;     }      [validateinput(false)]     public jsonresult searchbycode(string id)     {         var searchtext = id; //better name         var results = _publisheddata.getmattersbysearch(searchtext).select(             matter =>             new                 {                     mattercode = matter.code,                     mattername = matter.name,                      matter.clientcode,                      matter.clientname                 });         return json(results);     } 

this works, when call controller method jquery , step it, call _publisheddata method, goes class matterdal.

i want know how controller know go matterdal implementation of interface imatterdal. if have class called matterdal2 based on interface. how controller know call right method?

i sorry if stupid question, baffling me.

edit:

based on responses, seems dependency being resolved:

this ninject call:

        private static void registerservices(ikernel kernel)     {         kernel.bind<icpdmatterdal>().to<cachedcpddata>();     } 

where cachedcpddata is:

public class cachedcpddata : icpdmatterdal {     private static readonly object cachelockobject = new object();      private readonly matterdal _matterdata;      public cachedcpddata()     {         _matterdata = domainmodel.dataaccessmanager.instance.matters;     }      public ienumerable<matter> getmattersforautocompletebycode(string input)     {         var cachekey = string.format("matter-search-{0}", input ?? "");         var result = httpruntime.cache[cachekey] ienumerable<matter>;         if (result == null)         {             lock (cachelockobject)             {                 result = httpruntime.cache[cachekey] ienumerable<matter>;                 if (result == null)                 {                     result = _matterdata.getmattersforautocompletebycode(input).tolist();                     httpruntime.cache.insert(cachekey, result, null, datetime.now.addseconds(60), timespan.zero);                 }             }         }         return result;     }      public ienumerable<matter> getmattersbymattercodesearch(string input)     {         return _matterdata.getmattersbymattercodesearch(input);     } } 

the rason why code using right implementation of imatterdal because it's being passed parameter in constructor of mattercontroller. i'm sure code using dependency injection framework resolve imatterdal.

in fact ninject di framework. code should have like

kernel.bind<imatterdal>().to<matterdal >();


Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -