ps_*_*dev 1 c# constructor dependency-injection
我有一个UserService实现 interface的 Class IUserService。
本UserService类有构造函数初始化值给它的参数。
我正在UserService通过 DI 在另一个班级中使用 。
如何初始化 UserService 对象的值。
public class OfferService : IOfferService
{
private IUserService _userService;
private ISomeOtherService _someotherService;
public OfferService(IUserService userService, ISomeOtherService someotherService)
{
_userService = userService;
_someotherService = someotherService;
}
public bool SomeMethod()
{
string key = _someotherService.GetKey();
string value = _someotherService.GetValue();
//Calling parameterized constructor of UserService
var user = new UserService(key,value);
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用接口引用_userService通过构造函数初始化值。
处理这个问题的最简单方法是注入一个工厂而不是一个实例。这将允许您在运行时提供参数。
简单的工厂示例:
public interface IUserServiceFactory
{
IUserService GetUserService(string key, string val);
}
public class UserServiceFactory : IUserServiceFactory
{
public IUserService GetUserService(string key, string val)
{
return new UserService(key, val);
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用它:
public class OfferService : IOfferService
{
private IUserServiceFactory _userServiceFactory;
private ISomeOtherService _someotherService;
public OfferService(IUserServiceFactory userServiceFactory, ISomeOtherService someotherService)
{
_userServiceFactory = userServiceFactory;
_someotherService = someotherService;
}
public bool SomeMethod()
{
string key = _someotherService.GetKey();
string val = _someotherService.GetValue();
var user = _userServiceFactory.GetUserService(key, val);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
看我的小提琴
| 归档时间: |
|
| 查看次数: |
896 次 |
| 最近记录: |