我有一个asp.net mvc应用程序,我正在开发一个自定义属性来保护从CodeAccessSecurityAttribute继承的一些wcf端点。
我很难找到如何使用autofac来注入我可以在此属性中使用的服务依赖性。
[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class SecuredResourceAttribute : CodeAccessSecurityAttribute
{
public ISecurityService SecurityService { get; set; }
public SecuredResourceAttribute(SecurityAction action) : base(action)
{
}
public override IPermission CreatePermission()
{
// I need access to the SecurityService here
// SecurityService == null :(
}
}
我已经尝试从应用程序开始注册属性自动布线,但这不起作用。将依赖项注入属性的最佳方法是什么?
builder.RegisterType<SecuredResourceAttribute>().PropertiesAutowired();
由于
答案 0 :(得分:1)
你接近这个的方式不会因为几个原因而出现:
您将不得不在CreatePermission()
方法中使用服务位置模式来定位SecurityService,因为我假设在设置容器之后发出CreatePermission()
调用(并且构造函数确实如此)不!)
请记住,ServiceLocation会阻碍您的类可测试性,因为您必须为每个测试配置/设置服务定位器。
请谨慎使用
You should start your journey into ServiceLocation here但老实说,这会让你质疑你的设计。属性是否最适合您承担的角色?也许您应该研究像PostSharp这样的面向方面编程