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
Post a Comment