首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中执行依赖注入来配置扩展方法?

如何在c#中执行依赖注入来配置扩展方法?
EN

Stack Overflow用户
提问于 2021-04-11 23:46:06
回答 1查看 58关注 0票数 0

在c#中,我想为DateTime结构编写扩展方法,以便按年、月等计算日期差异。

为了准备更改日期差异的计算,我为此制作了一个接口,并将其传递给静态扩展类中的一个配置方法。

具体来说:

代码语言:javascript
复制
public static class DateTimeExtension
{

    private static IDateTimeDifference _dateDifference;


    public static void Configure(IDateTimeDifference dateDifference )
    {
        DateTimeExtension._dateDifference = dateDifference;
    }


    public static int DiffFromInYears(this DateTime dateFromIncl, DateTime dateToExcl)
    {
        return _dateDifference.InYears(dateFromIncl, dateToExcl);
    }

    public static int DiffToInYears(this DateTime dateToExcl, DateTime dateFromIncl)
    {
        return _dateDifference.InYears(dateFromIncl, dateToExcl);
    }

}

我的服务配置如下所示:

代码语言:javascript
复制
var host = Host
            .CreateDefaultBuilder()
            .ConfigureServices(
            (context, services) =>
            {
                services.AddSingleton<IDateTimeDifference>( s => new DateDifferenceFullPeriods() );
            }
            )
            .Build();

DateTimeExtension.Configure( host.Services.GetRequiredService<IDateTimeDifference>() );

我希望获得尽可能低的性能损失。

有没有办法强制我的扩展方法的用户在启动时调用Configure方法?

这段代码会被认为是可测试的吗?如何测试扩展方法?测试IDateTimeDifference接口的实现是否足够?

一般来说,扩展方法是解决这个问题的好方法,考虑到我不想在每个差异计算方法中传递IDateTimeDifference参数。

有没有其他更合适的注射方法?如果我不需要在运行时改变差异计算,依赖注入是必要的吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-12 02:04:47

  1. 你真的需要一个扩展方法吗?您不能只使用TimeSpan结构https://docs.microsoft.com/en-us/dotnet/api/system.timespan?view=net-5.0来计算以日、月为单位的时间差吗? years?
  2. Extension方法本质上是静态的,并且它们是在静态类中定义的。另一方面,依赖注入用于注册类的特定实例,并通常通过接口向需要它的其他类或方法提供类的此特定实例。但是,由于扩展方法是在静态类中定义的,并且是静态的,因此不需要注册静态类的实例,因为静态类在需要时会自动加载。一般来说,我看不到对扩展方法使用依赖注入的任何逻辑。扩展方法只能依赖于它们的参数和this对象。在为结构定义扩展方法时,它们不应该有任何其他外部dependency.
  3. More,您可以在这里阅读Extension methods on a struct
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67046998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档