我有一个抽象类Validation,它得到了进一步的扩展TextLetterValidation和扩展TextNullValidation。我的问题是,如何使用和实现依赖注入?
public interface IValidation
{
bool Validate(string text);
}
Run Code Online (Sandbox Code Playgroud)
public abstract class Validation : IValidation
{
public abstract bool Validate(string text);
}
Run Code Online (Sandbox Code Playgroud)
public class TextLetterValidation : Validation
{
public override bool Validate(string text)
{
return Regex.IsMatch(text, @"^[a-zA-Z]+$");
}
}
Run Code Online (Sandbox Code Playgroud)
public class TextNullValidation: Validation
{
public override bool Validate(string text)
{
if (!string.IsNullOrWhiteSpace(text))
{
return true;
}
else
{
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在课堂上实施以上内容?
public class xyz: AppAmbientState, IPalindrome
{
private readonly IValidation _validation;
public xyz(IValidation validation)
{
_validation = validation;
}
bool IPalindrome.IsTextValid { get; set; }
public bool IsTextPalindrome(string text)
{
throw new NotImplementedException();
}
public bool ValidateText(string text)
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这取决于您尝试实现的目标
如果您需要提供特定的实现,IValidation则可以像这样注册它:
services.AddTransient<TextNullValidation>();
services.AddTransient<TextLetterValidation>();
services.AddTransient<Func<string, IValidation>>(sp => key =>
{
switch (key)
{
case "TextNullValidation":
return sp.GetService<TextNullValidation>();
case "TextLetterValidation":
return sp.GetService<TextLetterValidation>();
default:
throw new KeyNotFoundException();
}
});
Run Code Online (Sandbox Code Playgroud)
并使用工厂注入接口
private readonly IValidation _validation;
public Test(Func<string, IValidation> validationFactory)
{
// will provide TextNullValidation instance
_validation = validationFactory("TextNullValidation");
}
Run Code Online (Sandbox Code Playgroud)
或同时注册:
services.AddTransient<IValidation, TextNullValidation>();
services.AddTransient<IValidation, TextLetterValidation>();
Run Code Online (Sandbox Code Playgroud)
并更改代码,以便您可以访问每个实现
private readonly ICollection<IValidation> _validation;
public xyz(ICollection<IValidation> validation)
{
_validation = validation;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |