c# - Sequential Implementation for one call using unity dependency injection -


what best way implement sequential implementation in async mode using unity dependency injection. if call 1 method create order, should create in 2 different implementations.

my controller:

public class ordercontroller : basecontroller {     private iorderrepository orderservice;      public ordercontroller (iorderrepository service)     {        this.orderservice = service;     }      public actionresult create (orderol obj)     {        // here want 2 implementations        // first on orderrepositorysql         // , after success response,         // should implement in orderrepositorymongo async method        orderservice.create(obj)        return view();     } 

}

my interface:

public interface iorderrepository {    int create (orderol obj); } 

my implementing class 1

public class orderrepositorysql : iorderrepository {     public int create (orderol obj)     {          // logic create order in data store 1     } } 

my implementing class 2

public class orderrepositorymongo : iorderrepository {     public int create (orderol obj)     {          // logic create order in data store 2     } } 

global.asax appstart event using asp.net mvc unity

container.registertype<iorderrepository, orderrepositorysql>(); container.registertype<iorderrepository, orderrepositorymongo>(); 

application details

  • c#.net 4.5
  • asp.net mvc 5
  • unity 3.0

you can't that, can resolve 1 component @ time. actually, these 2 lines of code conflict either @ compile time or @ runtime when try resolve iorderrepository...

container.registertype<iorderrepository, orderrepositorysql>(); container.registertype<iorderrepository, orderrepositorymongo>(); 

basically, need use named type registrations or inject wrapper service controller resolve these 2 components (orderrepositorysql , orderrepositorymongo) , processing required.

example

say have orderprocessor class processes orders , implements iorderprocessor interface, right?

public interface iorderprocessor {     processresult process(orderol obj); }  public class orderprocessor : iorderprocessor {        public processresult process(orderol obj)        {             //todo:             // 1- resolve orderrepositorysql              // 2- create order             // 3- resolve other repository             // 4- create order             // 5- return operation result        } } 

then controller injected order processor...

public class ordercontroller : basecontroller {     private iorderprocessor ordeprocessor;      public ordercontroller (iorderprocessor processor)     {        this.ordeprocessor= processor;     }      public actionresult create (orderol obj)     {        var result = processor.process(obj)        return view();     } } 

to register components...

container.registertype<iorderrepository, orderrepositorysql>("sql", null); container.registertype<iorderrepository, orderrepositorymongo>("mongo", null); 

to resolve them...

container.resolve<iorderrepository>("sql"); container.resolve<iorderrepository>("mongo"); 

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 -