为了账号安全,请及时绑定邮箱和手机立即绑定

.Net Core 依赖注入获取两个工厂方法生成的不同实例

.Net Core 依赖注入获取两个工厂方法生成的不同实例

C#
温温酱 2021-06-18 22:01:47
我有两个静态类,每个类都有一个静态工厂方法。public static class First{ public IMyService Factory() {   return IMyService()   {    //configure with Configs   }; }}public static class Second{ public IMyService Factory() {  return IMyService()  {   // configure with different Configs  }; }}以下将使提供者在被要求时返回一个实例:   services.AddSingleton(mb =>            {                var myService= First.Factory();                return myService;            });当需要获取具有不同配置的实例时,如何调用不同的工厂?
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您的客户端代码或引导代码需要以某种方式表达所需的实现类型。您可以通过以下方式实现它:


public Interface IReqeust

{

    // Some code

}


public class HttpRequest : IRequest

{

    // Implementation

}


public class TcpRequest : IRequest

{

    // Implementation

}

一种方法可能是提供多种方法。您仍然可以隐藏配置,但一些实现细节会泄漏到您的客户端代码中。


public Interface IRequestFactory

{

    IRequest CreateHttpRequest();


    IRequest CreateTcpRequest();

}


public class RequestFactory : IRequestFactory

{

    // Implementation

}

另一种解决方案是确定在建造工厂时需要什么。


public Interface IRequestFactory

{

    IRequest CreateRequest();

}


public class RequestFactory : IRequestFactory

{

    private IConfigReader configReader;


    public RequestFactory(IConfigReader configReader)

    {

        this.configReader = configReader;

    }


    public IRequest CreateRequest()

    {

        var currentProtocoll = configReader.GetCurrentProtocoll();

        if(currentProtocoll is HTTP)

            return new HttpRequest();

        else

            return new TcpRequest();

    }

}

我不会推荐更多工厂的解决方案。至少不是你到目前为止所写的。


查看完整回答
反对 回复 2021-06-20
  • 2 回答
  • 0 关注
  • 259 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信