C# 在.NETMVC中使用Ninject消除样板文件参数

C# 在.NETMVC中使用Ninject消除样板文件参数,c#,asp.net-mvc,repository,ninject,C#,Asp.net Mvc,Repository,Ninject,我们的许多存储库都有关于日期范围的样板参数,因为我们的应用程序对日期范围非常敏感: public static IEnumerable<Records> GetByClient(int clientId, DateTime start, DateTime end){} public static IEnumerable<Records> GetByRegion(int regionId, DateTime start, DateTime end){} publicsta

我们的许多存储库都有关于日期范围的样板参数,因为我们的应用程序对日期范围非常敏感:

public static IEnumerable<Records> GetByClient(int clientId, DateTime start, DateTime end){}
public static IEnumerable<Records> GetByRegion(int regionId, DateTime start, DateTime end){}
publicstaticIEnumerablegetByClient(int-clientId,DateTime-start,DateTime-end){}
公共静态IEnumerable GetByRegion(int regionId、DateTime开始、DateTime结束){}
在.NETMVC中使用Ninject将DateTime开始和DateTime结束从http请求级别一直传递到存储库级别,有没有一种解决这个问题的好方法

这些存储库将具有“请求”范围,因此在每个请求之后进行处理,并且由于每个请求只有一个时间范围,Ninject将创建具有适当开始/结束时间作为存储库级别属性的存储库?回购方法看起来有点像这样:

public static IEnumerable<Records> GetByClient(int clientId){
  query.Where(c=>c.Date >= startDate && c.Date <= endDate)...

}
公共静态IEnumerable GetByClient(int-clientId){

query.Where(c=>c.Date>=startDate&&c.Date在我看来,您的应用程序缺少一个抽象。正如您所说,您的应用程序“对日期范围非常敏感”,并且该信息似乎比运行时日期更“上下文化”,因此该日期范围应该有自己的抽象。例如:

public interface IDateRangeContext
{
    DateTime Start { get; }
    DateTime End { get; }
}
通过这种方式,您可以轻松地将此类
IDateRangeContext
注入到其他需要它的服务中。这还可以非常清楚地表明哪些服务与日期范围相关

对于给定的请求,
clientId
regionId
也可以用同样的方法固定。换句话说,它们可能也是上下文值。也可以将它们升级为服务:

public interface IUserContext
{
    int ClientId { get; }
    int Regionid { get; }
}

在我看来,您的应用程序缺少一个抽象。正如您所说,您的应用程序“对日期范围非常敏感”,而且这些信息似乎比运行时日期更“上下文化”,因此该日期范围应该有自己的抽象。例如:

public interface IDateRangeContext
{
    DateTime Start { get; }
    DateTime End { get; }
}
通过这种方式,您可以轻松地将此类
IDateRangeContext
注入到其他需要它的服务中。这还可以非常清楚地表明哪些服务与日期范围相关

对于给定的请求,
clientId
regionId
也可以用同样的方法固定。换句话说,它们可能也是上下文值。也可以将它们升级为服务:

public interface IUserContext
{
    int ClientId { get; }
    int Regionid { get; }
}

在我看来,您的应用程序缺少一个抽象。正如您所说,您的应用程序“对日期范围非常敏感”,而且这些信息似乎比运行时日期更“上下文化”,因此该日期范围应该有自己的抽象。例如:

public interface IDateRangeContext
{
    DateTime Start { get; }
    DateTime End { get; }
}
通过这种方式,您可以轻松地将此类
IDateRangeContext
注入到其他需要它的服务中。这还可以非常清楚地表明哪些服务与日期范围相关

对于给定的请求,
clientId
regionId
也可以用同样的方法固定。换句话说,它们可能也是上下文值。也可以将它们升级为服务:

public interface IUserContext
{
    int ClientId { get; }
    int Regionid { get; }
}

在我看来,您的应用程序缺少一个抽象。正如您所说,您的应用程序“对日期范围非常敏感”,而且这些信息似乎比运行时日期更“上下文化”,因此该日期范围应该有自己的抽象。例如:

public interface IDateRangeContext
{
    DateTime Start { get; }
    DateTime End { get; }
}
通过这种方式,您可以轻松地将此类
IDateRangeContext
注入到其他需要它的服务中。这还可以非常清楚地表明哪些服务与日期范围相关

对于给定的请求,
clientId
regionId
也可以用同样的方法固定。换句话说,它们可能也是上下文值。也可以将它们升级为服务:

public interface IUserContext
{
    int ClientId { get; }
    int Regionid { get; }
}

根据Steven的回答,有两种方法可以获取ninject上下文中的数据

a) 使用工厂将
IDateRangeContext
作为
iPareter
p.Ex放置在ninject上下文上:使用
IResolutionRoot.Get(新构造函数参数(“dateRangeContext”,dateRangeContext,true)
-->true用于继承。 这样,由foo请求实例化的任何对象(包括依赖项)都可以将
IDateRangeContext
构造函数作为名为“dateRangeContext”的参数注入(您还可以滚动自己的
IParameter
,它处理类型/
IDateRangeInterface
,但不关心参数名称)


b)
Bind根据Steven的回答,有两种方法可以获取ninject上下文中的数据

a) 使用工厂将
IDateRangeContext
作为
iPareter
p.Ex放置在ninject上下文上:使用
IResolutionRoot.Get(新构造函数参数(“dateRangeContext”,dateRangeContext,true)
-->true用于继承。 这样,由foo请求实例化的任何对象(包括依赖项)都可以将
IDateRangeContext
构造函数作为名为“dateRangeContext”的参数注入(您还可以滚动自己的
IParameter
,它处理类型/
IDateRangeInterface
,但不关心参数名称)


b)
Bind根据Steven的回答,有两种方法可以获取ninject上下文中的数据

a) 使用工厂将
IDateRangeContext
作为
iPareter
p.Ex放置在ninject上下文上:使用
IResolutionRoot.Get(新构造函数参数(“dateRangeContext”,dateRangeContext,true)
-->true用于继承。 这样,由foo请求实例化的任何对象(包括依赖项)都可以将
IDateRangeContext
构造函数作为名为“dateRangeContext”的参数注入(您还可以滚动自己的
IParameter
,它处理类型/
IDateRangeInterface
,但不关心参数名称)


b)
Bind根据Steven的回答,有两种方法可以获取ninject上下文中的数据

a) 使用工厂将
IDateRangeContext
作为
iPareter
p.Ex放置在NinObject上下文中:使用
IResolutionR