gpt4 book ai didi

c# - Setter Property Required 原始依赖项未明确定义

转载 作者:太空狗 更新时间:2023-10-29 23:43:48 26 4
gpt4 key购买 nike

我有 Asp.Net MVC 应用程序并且我使用了结构图,我使用自定义 ThrottleAttribute ActionFilter。关注rate limiting in asp.net mvc

public enum TimeUnit
{
Minute = 60,
Hour = 3600,
Day = 86400
}

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class ThrottleAttribute : ActionFilterAttribute
{
public TimeUnit Time { get; set; }
public int Count { get; set; }

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var seconds = Convert.ToInt32(Time);

var key = string.Join(
"-",
seconds,
filterContext.HttpContext.Request.HttpMethod,
filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
filterContext.ActionDescriptor.ActionName,
filterContext.HttpContext.Request.UserHostAddress
);

// increment the cache value
var cnt = 1;
if (HttpRuntime.Cache[key] != null)
{
cnt = (int)HttpRuntime.Cache[key] + 1;
}
HttpRuntime.Cache.Insert(
key,
cnt,
null,
DateTime.UtcNow.AddSeconds(seconds),
Cache.NoSlidingExpiration,
CacheItemPriority.Low,
null
);

if (cnt >= Count)
{

filterContext.Result = new ContentResult
{
Content = "You are allowed to make only " + Count + " requests per " + Time.ToString().ToLower()
};
filterContext.HttpContext.Response.StatusCode = 429;
}
}
}

在我使用 ThrottleAttribute 抛出异常之后:

Setter Property 'Time' (ActionFilters.TimeUnit): Required primitive dependency is not explicitly defined

还有我的 ActionFilter 注册表:

public class ActionFilterRegisteryClass : StructureMap.Registry
{
public ActionFilterRegisteryClass(Func<StructureMap.IContainer> containerFactory)
{
For<IFilterProvider>().Use(
new StructurMapFilterProvider(containerFactory));

Policies.SetAllProperties(x =>
{
x.Matching(p =>
p.DeclaringType.CanBeCastTo(typeof(ActionFilterAttribute)) &&
(
p.DeclaringType.Namespace.StartsWith("MyNamespace")
) &&
!p.PropertyType.IsPrimitive &&
p.PropertyType != typeof(string)
);
});
}
}

异常发生在:container.BuildUp(filter.Instance);

public class StructurMapFilterProvider : FilterAttributeFilterProvider
{
private readonly Func<StructureMap.IContainer> _Container;

public StructurMapFilterProvider(Func<StructureMap.IContainer> container)
{
_Container = container;
}

public override IEnumerable<Filter> GetFilters(ControllerContext controllerContext,
ActionDescriptor actionDescriptor)
{
var filters = base.GetFilters(controllerContext, actionDescriptor);

var container = _Container();

foreach (var filter in filters)
{
container.BuildUp(filter.Instance);

yield return filter;
}
}
}

Setter Property 'Time' (ActionFilters.TimeUnit): Required primitive dependency is not explicitly defined

我该怎么办?

如何显式定义 PrimitiveTypes?

最佳答案

问题出在在结构图中注册 ActionFilterClass。我已将其更改如下:

public class ActionFilterRegisteryClass : StructureMap.Registry
{
public ActionFilterRegisteryClass(Func<StructureMap.IContainer> containerFactory)
{
For<IFilterProvider>().Use(
new StructurMapFilterProvider(containerFactory));

Policies.SetAllProperties(x =>
{
x.Matching(p =>
p.DeclaringType.CanBeCastTo(
!p.PropertyType.IsPrimitive &&
!p.PropertyType.IsEnum &&
p.PropertyType != typeof(string));
});
}
}

关于c# - Setter Property Required 原始依赖项未明确定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404444/

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