在我的自定义属性中注入属性?

时间:2012-03-19 22:56:15

标签: dependency-injection dependencies structuremap custom-attributes

我们在当前项目中使用StructureMap作为容器,并且一直运行良好,直到我们必须将依赖项注入我们正在使用的自定义属性。

首先,在容器中注册东西的代码看起来像这样......

Container = new Container();
Registry = new Registry();
ServiceLocator = new StructureMapServiceLocator(Container);

Registry.For<IServiceLocator>().Use(ServiceLocator);
Registry.For<IHitCounter>().Add<HitCounter>();
Registry.For<IHitCountAttribute>().Use<HitCountAttribute>();

Registry.SetAllProperties(policy => policy.OfType<IHitCounter>());  

Container.Configure(config => config.AddRegistry(Registry));

上面的注册类型适用于具有setter注入(和构造函数注入)的普通类,但显然不适用于属性类。

属性类看起来像这样......

public class HitCountAttribute : ActionFilterAttribute, IHitCountAttribute
{
    public IHitCounter HitCounter { get; set; }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        HitCounter.Count(HttpContext.Current.Request.Url.ToString());

        base.OnResultExecuted(filterContext);
    }
}

界面看起来像这样......

public interface IHitCountAttribute
{
    IHitCounter HitCounter { get; set; }
    void OnResultExecuted(ResultExecutedContext filterContext);
}

甚至可以将依赖项注入属性吗?因为它是由运行时实例化的......

有没有其他方法可以解决依赖关系的问题?

0 个答案:

没有答案