gpt4 book ai didi

c# - 如何在抽象类中实现依赖注入(inject)

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:30 25 4
gpt4 key购买 nike

我有一个抽象类 Validation,它进一步扩展了 TextLetterValidationTextNullValidation。我的问题是,如何使用和实现依赖注入(inject)?

界面

 public interface IValidation
{
bool Validate(string text);
}

抽象类

 public abstract class Validation : IValidation
{
public abstract bool Validate(string text);
}

文本字母验证

 public class TextLetterValidation : Validation
{
public override bool Validate(string text)
{
return Regex.IsMatch(text, @"^[a-zA-Z]+$");
}
}

文本空值验证

 public class TextNullValidation: Validation
{
public override bool Validate(string text)
{
if (!string.IsNullOrWhiteSpace(text))
{
return true;
}
else
{
return false;
}
}
}

我的问题是如何在我的类(class)中实现上面的内容?

我的类(class)

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;
}

最佳答案

这取决于你想达到什么目的

如果你需要提供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();
}
});

并在你注入(inject)接口(interface)的地方使用工厂

private readonly IValidation _validation;

public Test(Func<string, IValidation> validationFactory)
{
// will provide TextNullValidation instance
_validation = validationFactory("TextNullValidation");
}

或者同时注册:

services.AddTransient<IValidation, TextNullValidation>();
services.AddTransient<IValidation, TextLetterValidation>();

并更改代码以便您可以访问每个实现

private readonly ICollection<IValidation> _validation;

public xyz(ICollection<IValidation> validation)
{
_validation = validation;
}

关于c# - 如何在抽象类中实现依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com