c# – 它是一个代码气味来注入一个依赖关系并将其成员设置为“这”?

c# – 它是一个代码气味来注入一个依赖关系并将其成员设置为“这”?,第1张

概述它是一种代码气味注入一个依赖关系,并将其属性设置为当前实例?我以这种方式设置我的代码,所以我可以完全隔离服务实现.我有一系列测试全部通过(包括在逻辑类中设置StreamingSubscriber实例). 例如 public class StreamingSubscriber{ private readonly ILogic _logic; public StreamingSu 它是一种代码气味来注入一个依赖关系,并将其属性设置为当前实例?我以这种方式设置我的代码,所以我可以完全隔离服务实现.我有一系列测试全部通过(包括在逻辑类中设置StreamingSubscriber实例).

例如

public class StreamingSubscriber{    private Readonly ILogic _logic;    public StreamingSubscriber(ILogic logic)    {                    _logic = logic;        // Not sure I like this...        _logic.StreamingSubscriber = this;    }    public voID OnNotificationEvent(object sender,NotificationEventArgs args)    {        // Do something with _logic        var email = _logic.FetchEmail(args);        // consume the email (omitted for brevity)    }}public class ExchangeLogic : ILogic{       public StreamingSubscriber StreamingSubscriber { get; set; }    public voID Subscribe()    {        // Here is where I use StreamingSubscriber        streamingConnection.OnNotificationEvent += StreamingSubscriber.OnNotificationEvent;    }    public IEmail FetchEmail(NotificationEventArgs notificationEventArgs)    {        // Fetch email from Exchange    }}

如果这是一个代码气味你怎么去修复它?

编辑

我选择这个实现的原因是因为我想要测试当来自ExchangeLogic的streamingConnection被调用时它会消耗该电子邮件.目前的设计虽然不完美,但允许我编写类似这样的测试.

[Test]    public voID FiringOnNotificationEvent_WillConsumeEmail()    {        // Arrange        var subscriber = new StreamingSubscriber(ConsumerMock.Object,ExchangeLogicmock.Object);        // Act        subscriber.OnNotificationEvent(It.IsAny<object>(),It.IsAny<NotificationEventArgs>());        // Assert        ConsumerMock.Verify(x => x.Consume(It.IsAny<IEmail>()),Times.Once());    }

现在,如果没有进行完整的集成测试,这显然是无法实现的.如果我告诉我的ExchangeLogic消费电子邮件.

解决方法 它不会把我当成代码气味本身,不.

但是,通过设置器进行此工作会产生一个您可能遇到计时问题的情况 – 如果有人拨打订阅并且尚未设置StreamingSubscriber?现在你必须编写代码来防范.我会避免使用setter并重新排列,这样就可以调用“_logic.Subscribe(this)”.

总结

以上是内存溢出为你收集整理的c# – 它是一个代码气味来注入一个依赖关系并将其成员设置为“这”?全部内容,希望文章能够帮你解决c# – 它是一个代码气味来注入一个依赖关系并将其成员设置为“这”?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1261115.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存