How to access class properties through an Interface instance using Unity.WebApi












2















Is it possible to expose class public properties in different class through IOC. I am creating an instance of Interface but i am not able to access public properties of class. I am using Unity.WebApi for resolving dependencies.



TransactionService Class



public class TransactionService : ITransactionService
{
private readonly IMRepository _mRepository;
private readonly IFService _fGateway;

public TransactionService(IMbaRepository mbaRepository, IFpnService fpnService)
{
_mRepository = mRepository;
_fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser)
{

foreach (var item in something)
{
//can't use _fGateway to set properties because Interface
// don't implement them
_fGateway.OID = objFUser.OID.ToString();
_fGateway.Amount = objFUser.Amount;

_fGateway.Search(criteria);

}

}



}


FService class



public class FService : IFpService
{

public string _OID { get; set; }
public decimal _Amount{ get; set; }

public TransactionResponse Search(string criteria)
{

TransactionOperationInput _input;
_input = new TransactionOperationInput()
{
Criteria = _criteria,
OID = _OID,
Amount = _Amount
};

// search transactions
}



}









share|improve this question























  • Are you able to update interface to include missing property? This looks like a design issue.

    – Nkosi
    Nov 14 '18 at 18:34













  • Otherwise you would need to cast the interface. This however is a bad design as it tightly couples to implementation concerns which goes against the very reason for injecting abstractions..

    – Nkosi
    Nov 14 '18 at 18:41











  • I don't have any control over _input = new TransactionOperationInput() bcause its part of dll file.

    – user1263981
    Nov 14 '18 at 18:57













  • I was referring to IFService interface

    – Nkosi
    Nov 14 '18 at 18:59


















2















Is it possible to expose class public properties in different class through IOC. I am creating an instance of Interface but i am not able to access public properties of class. I am using Unity.WebApi for resolving dependencies.



TransactionService Class



public class TransactionService : ITransactionService
{
private readonly IMRepository _mRepository;
private readonly IFService _fGateway;

public TransactionService(IMbaRepository mbaRepository, IFpnService fpnService)
{
_mRepository = mRepository;
_fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser)
{

foreach (var item in something)
{
//can't use _fGateway to set properties because Interface
// don't implement them
_fGateway.OID = objFUser.OID.ToString();
_fGateway.Amount = objFUser.Amount;

_fGateway.Search(criteria);

}

}



}


FService class



public class FService : IFpService
{

public string _OID { get; set; }
public decimal _Amount{ get; set; }

public TransactionResponse Search(string criteria)
{

TransactionOperationInput _input;
_input = new TransactionOperationInput()
{
Criteria = _criteria,
OID = _OID,
Amount = _Amount
};

// search transactions
}



}









share|improve this question























  • Are you able to update interface to include missing property? This looks like a design issue.

    – Nkosi
    Nov 14 '18 at 18:34













  • Otherwise you would need to cast the interface. This however is a bad design as it tightly couples to implementation concerns which goes against the very reason for injecting abstractions..

    – Nkosi
    Nov 14 '18 at 18:41











  • I don't have any control over _input = new TransactionOperationInput() bcause its part of dll file.

    – user1263981
    Nov 14 '18 at 18:57













  • I was referring to IFService interface

    – Nkosi
    Nov 14 '18 at 18:59
















2












2








2


0






Is it possible to expose class public properties in different class through IOC. I am creating an instance of Interface but i am not able to access public properties of class. I am using Unity.WebApi for resolving dependencies.



TransactionService Class



public class TransactionService : ITransactionService
{
private readonly IMRepository _mRepository;
private readonly IFService _fGateway;

public TransactionService(IMbaRepository mbaRepository, IFpnService fpnService)
{
_mRepository = mRepository;
_fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser)
{

foreach (var item in something)
{
//can't use _fGateway to set properties because Interface
// don't implement them
_fGateway.OID = objFUser.OID.ToString();
_fGateway.Amount = objFUser.Amount;

_fGateway.Search(criteria);

}

}



}


FService class



public class FService : IFpService
{

public string _OID { get; set; }
public decimal _Amount{ get; set; }

public TransactionResponse Search(string criteria)
{

TransactionOperationInput _input;
_input = new TransactionOperationInput()
{
Criteria = _criteria,
OID = _OID,
Amount = _Amount
};

// search transactions
}



}









share|improve this question














Is it possible to expose class public properties in different class through IOC. I am creating an instance of Interface but i am not able to access public properties of class. I am using Unity.WebApi for resolving dependencies.



TransactionService Class



public class TransactionService : ITransactionService
{
private readonly IMRepository _mRepository;
private readonly IFService _fGateway;

public TransactionService(IMbaRepository mbaRepository, IFpnService fpnService)
{
_mRepository = mRepository;
_fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser)
{

foreach (var item in something)
{
//can't use _fGateway to set properties because Interface
// don't implement them
_fGateway.OID = objFUser.OID.ToString();
_fGateway.Amount = objFUser.Amount;

_fGateway.Search(criteria);

}

}



}


FService class



public class FService : IFpService
{

public string _OID { get; set; }
public decimal _Amount{ get; set; }

public TransactionResponse Search(string criteria)
{

TransactionOperationInput _input;
_input = new TransactionOperationInput()
{
Criteria = _criteria,
OID = _OID,
Amount = _Amount
};

// search transactions
}



}






c# oop asp.net-web-api interface inversion-of-control






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 14 '18 at 18:16









user1263981user1263981

1,15562964




1,15562964













  • Are you able to update interface to include missing property? This looks like a design issue.

    – Nkosi
    Nov 14 '18 at 18:34













  • Otherwise you would need to cast the interface. This however is a bad design as it tightly couples to implementation concerns which goes against the very reason for injecting abstractions..

    – Nkosi
    Nov 14 '18 at 18:41











  • I don't have any control over _input = new TransactionOperationInput() bcause its part of dll file.

    – user1263981
    Nov 14 '18 at 18:57













  • I was referring to IFService interface

    – Nkosi
    Nov 14 '18 at 18:59





















  • Are you able to update interface to include missing property? This looks like a design issue.

    – Nkosi
    Nov 14 '18 at 18:34













  • Otherwise you would need to cast the interface. This however is a bad design as it tightly couples to implementation concerns which goes against the very reason for injecting abstractions..

    – Nkosi
    Nov 14 '18 at 18:41











  • I don't have any control over _input = new TransactionOperationInput() bcause its part of dll file.

    – user1263981
    Nov 14 '18 at 18:57













  • I was referring to IFService interface

    – Nkosi
    Nov 14 '18 at 18:59



















Are you able to update interface to include missing property? This looks like a design issue.

– Nkosi
Nov 14 '18 at 18:34







Are you able to update interface to include missing property? This looks like a design issue.

– Nkosi
Nov 14 '18 at 18:34















Otherwise you would need to cast the interface. This however is a bad design as it tightly couples to implementation concerns which goes against the very reason for injecting abstractions..

– Nkosi
Nov 14 '18 at 18:41





Otherwise you would need to cast the interface. This however is a bad design as it tightly couples to implementation concerns which goes against the very reason for injecting abstractions..

– Nkosi
Nov 14 '18 at 18:41













I don't have any control over _input = new TransactionOperationInput() bcause its part of dll file.

– user1263981
Nov 14 '18 at 18:57







I don't have any control over _input = new TransactionOperationInput() bcause its part of dll file.

– user1263981
Nov 14 '18 at 18:57















I was referring to IFService interface

– Nkosi
Nov 14 '18 at 18:59







I was referring to IFService interface

– Nkosi
Nov 14 '18 at 18:59














1 Answer
1






active

oldest

votes


















1














If you are in control of the services then refactor the interfaces to expose the desired members



public interface IFService {
TransactionResponse Search(TransactionOperationInput input);
}


Make sure the derived implementation has those members



public class FService : IFpService {

public TransactionResponse Search(TransactionOperationInput input) {

// search transactions
}
}


And that the dependent class uses the correct abstraction



public class TransactionService : ITransactionService {
private readonly IMRepository _mRepository;
private readonly IFService fGateway;

public TransactionService(IMbaRepository mbaRepository, IFService fService) {
_mRepository = mRepository;
fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser) {
foreach (var item in something) {

TransactionOperationInput input = new TransactionOperationInput() {
Criteria = _criteria,
OID = objFUser.OID.ToString(),
Amount = objFUser.Amount,
};

fGateway.Search(input);

//...
}

//...
}
}


Finally make sure the register the appropriate abstractions and implementations with the IoC/DI container.






share|improve this answer


























  • can IFService expose an object of TransactionOperationInput class which is in dll? I was thinking about having TransactionOperationInput object in TransactionService class where i can set all inputs and then pass it as argument to search method in Fservice.

    – user1263981
    Nov 14 '18 at 19:11











  • @user1263981 yes you can do that. That is a more solid design as well.

    – Nkosi
    Nov 14 '18 at 19:16













  • @user1263981 check updated answer based on your comment

    – Nkosi
    Nov 14 '18 at 19:21











  • @user1263981 also if you find the answers useful remember to vote them up as well.

    – Nkosi
    Nov 14 '18 at 19:23











  • Thanks. Search(TransactionOperationInput input) is a private method in TransactionService. TransanctionService implements two methods and it also has one private method which is being called in implemented method with in the class.

    – user1263981
    Nov 14 '18 at 19:28













Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53306471%2fhow-to-access-class-properties-through-an-interface-instance-using-unity-webapi%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














If you are in control of the services then refactor the interfaces to expose the desired members



public interface IFService {
TransactionResponse Search(TransactionOperationInput input);
}


Make sure the derived implementation has those members



public class FService : IFpService {

public TransactionResponse Search(TransactionOperationInput input) {

// search transactions
}
}


And that the dependent class uses the correct abstraction



public class TransactionService : ITransactionService {
private readonly IMRepository _mRepository;
private readonly IFService fGateway;

public TransactionService(IMbaRepository mbaRepository, IFService fService) {
_mRepository = mRepository;
fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser) {
foreach (var item in something) {

TransactionOperationInput input = new TransactionOperationInput() {
Criteria = _criteria,
OID = objFUser.OID.ToString(),
Amount = objFUser.Amount,
};

fGateway.Search(input);

//...
}

//...
}
}


Finally make sure the register the appropriate abstractions and implementations with the IoC/DI container.






share|improve this answer


























  • can IFService expose an object of TransactionOperationInput class which is in dll? I was thinking about having TransactionOperationInput object in TransactionService class where i can set all inputs and then pass it as argument to search method in Fservice.

    – user1263981
    Nov 14 '18 at 19:11











  • @user1263981 yes you can do that. That is a more solid design as well.

    – Nkosi
    Nov 14 '18 at 19:16













  • @user1263981 check updated answer based on your comment

    – Nkosi
    Nov 14 '18 at 19:21











  • @user1263981 also if you find the answers useful remember to vote them up as well.

    – Nkosi
    Nov 14 '18 at 19:23











  • Thanks. Search(TransactionOperationInput input) is a private method in TransactionService. TransanctionService implements two methods and it also has one private method which is being called in implemented method with in the class.

    – user1263981
    Nov 14 '18 at 19:28


















1














If you are in control of the services then refactor the interfaces to expose the desired members



public interface IFService {
TransactionResponse Search(TransactionOperationInput input);
}


Make sure the derived implementation has those members



public class FService : IFpService {

public TransactionResponse Search(TransactionOperationInput input) {

// search transactions
}
}


And that the dependent class uses the correct abstraction



public class TransactionService : ITransactionService {
private readonly IMRepository _mRepository;
private readonly IFService fGateway;

public TransactionService(IMbaRepository mbaRepository, IFService fService) {
_mRepository = mRepository;
fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser) {
foreach (var item in something) {

TransactionOperationInput input = new TransactionOperationInput() {
Criteria = _criteria,
OID = objFUser.OID.ToString(),
Amount = objFUser.Amount,
};

fGateway.Search(input);

//...
}

//...
}
}


Finally make sure the register the appropriate abstractions and implementations with the IoC/DI container.






share|improve this answer


























  • can IFService expose an object of TransactionOperationInput class which is in dll? I was thinking about having TransactionOperationInput object in TransactionService class where i can set all inputs and then pass it as argument to search method in Fservice.

    – user1263981
    Nov 14 '18 at 19:11











  • @user1263981 yes you can do that. That is a more solid design as well.

    – Nkosi
    Nov 14 '18 at 19:16













  • @user1263981 check updated answer based on your comment

    – Nkosi
    Nov 14 '18 at 19:21











  • @user1263981 also if you find the answers useful remember to vote them up as well.

    – Nkosi
    Nov 14 '18 at 19:23











  • Thanks. Search(TransactionOperationInput input) is a private method in TransactionService. TransanctionService implements two methods and it also has one private method which is being called in implemented method with in the class.

    – user1263981
    Nov 14 '18 at 19:28
















1












1








1







If you are in control of the services then refactor the interfaces to expose the desired members



public interface IFService {
TransactionResponse Search(TransactionOperationInput input);
}


Make sure the derived implementation has those members



public class FService : IFpService {

public TransactionResponse Search(TransactionOperationInput input) {

// search transactions
}
}


And that the dependent class uses the correct abstraction



public class TransactionService : ITransactionService {
private readonly IMRepository _mRepository;
private readonly IFService fGateway;

public TransactionService(IMbaRepository mbaRepository, IFService fService) {
_mRepository = mRepository;
fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser) {
foreach (var item in something) {

TransactionOperationInput input = new TransactionOperationInput() {
Criteria = _criteria,
OID = objFUser.OID.ToString(),
Amount = objFUser.Amount,
};

fGateway.Search(input);

//...
}

//...
}
}


Finally make sure the register the appropriate abstractions and implementations with the IoC/DI container.






share|improve this answer















If you are in control of the services then refactor the interfaces to expose the desired members



public interface IFService {
TransactionResponse Search(TransactionOperationInput input);
}


Make sure the derived implementation has those members



public class FService : IFpService {

public TransactionResponse Search(TransactionOperationInput input) {

// search transactions
}
}


And that the dependent class uses the correct abstraction



public class TransactionService : ITransactionService {
private readonly IMRepository _mRepository;
private readonly IFService fGateway;

public TransactionService(IMbaRepository mbaRepository, IFService fService) {
_mRepository = mRepository;
fGateway = fService;
}

private List<Transaction> SearchTransacionsByUser(FUser objFUser) {
foreach (var item in something) {

TransactionOperationInput input = new TransactionOperationInput() {
Criteria = _criteria,
OID = objFUser.OID.ToString(),
Amount = objFUser.Amount,
};

fGateway.Search(input);

//...
}

//...
}
}


Finally make sure the register the appropriate abstractions and implementations with the IoC/DI container.







share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 14 '18 at 19:31

























answered Nov 14 '18 at 19:04









NkosiNkosi

112k16123190




112k16123190













  • can IFService expose an object of TransactionOperationInput class which is in dll? I was thinking about having TransactionOperationInput object in TransactionService class where i can set all inputs and then pass it as argument to search method in Fservice.

    – user1263981
    Nov 14 '18 at 19:11











  • @user1263981 yes you can do that. That is a more solid design as well.

    – Nkosi
    Nov 14 '18 at 19:16













  • @user1263981 check updated answer based on your comment

    – Nkosi
    Nov 14 '18 at 19:21











  • @user1263981 also if you find the answers useful remember to vote them up as well.

    – Nkosi
    Nov 14 '18 at 19:23











  • Thanks. Search(TransactionOperationInput input) is a private method in TransactionService. TransanctionService implements two methods and it also has one private method which is being called in implemented method with in the class.

    – user1263981
    Nov 14 '18 at 19:28





















  • can IFService expose an object of TransactionOperationInput class which is in dll? I was thinking about having TransactionOperationInput object in TransactionService class where i can set all inputs and then pass it as argument to search method in Fservice.

    – user1263981
    Nov 14 '18 at 19:11











  • @user1263981 yes you can do that. That is a more solid design as well.

    – Nkosi
    Nov 14 '18 at 19:16













  • @user1263981 check updated answer based on your comment

    – Nkosi
    Nov 14 '18 at 19:21











  • @user1263981 also if you find the answers useful remember to vote them up as well.

    – Nkosi
    Nov 14 '18 at 19:23











  • Thanks. Search(TransactionOperationInput input) is a private method in TransactionService. TransanctionService implements two methods and it also has one private method which is being called in implemented method with in the class.

    – user1263981
    Nov 14 '18 at 19:28



















can IFService expose an object of TransactionOperationInput class which is in dll? I was thinking about having TransactionOperationInput object in TransactionService class where i can set all inputs and then pass it as argument to search method in Fservice.

– user1263981
Nov 14 '18 at 19:11





can IFService expose an object of TransactionOperationInput class which is in dll? I was thinking about having TransactionOperationInput object in TransactionService class where i can set all inputs and then pass it as argument to search method in Fservice.

– user1263981
Nov 14 '18 at 19:11













@user1263981 yes you can do that. That is a more solid design as well.

– Nkosi
Nov 14 '18 at 19:16







@user1263981 yes you can do that. That is a more solid design as well.

– Nkosi
Nov 14 '18 at 19:16















@user1263981 check updated answer based on your comment

– Nkosi
Nov 14 '18 at 19:21





@user1263981 check updated answer based on your comment

– Nkosi
Nov 14 '18 at 19:21













@user1263981 also if you find the answers useful remember to vote them up as well.

– Nkosi
Nov 14 '18 at 19:23





@user1263981 also if you find the answers useful remember to vote them up as well.

– Nkosi
Nov 14 '18 at 19:23













Thanks. Search(TransactionOperationInput input) is a private method in TransactionService. TransanctionService implements two methods and it also has one private method which is being called in implemented method with in the class.

– user1263981
Nov 14 '18 at 19:28







Thanks. Search(TransactionOperationInput input) is a private method in TransactionService. TransanctionService implements two methods and it also has one private method which is being called in implemented method with in the class.

– user1263981
Nov 14 '18 at 19:28




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53306471%2fhow-to-access-class-properties-through-an-interface-instance-using-unity-webapi%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Xamarin.form Move up view when keyboard appear

JBPM : POST request for execute process go wrong