C# PostSharp中的依赖注入

C# PostSharp中的依赖注入,c#,.net,wcf,unity-container,postsharp,C#,.net,Wcf,Unity Container,Postsharp,我刚刚阅读了PostSharp.net上的文档,需要从WCF服务的角度进行一些澄清 这是我尝试通过Unity使用ICache的修剪缓存方面: [Serializable] public class CacheAspect : OnMethodBoundaryAspect, IInstanceScopedAspect { [IntroduceMember(Visibility = Visibility.Family, OverrideAction = MemberOverrideActio

我刚刚阅读了PostSharp.net上的文档,需要从WCF服务的角度进行一些澄清

这是我尝试通过Unity使用ICache的修剪缓存方面:

[Serializable]
public class CacheAspect : OnMethodBoundaryAspect, IInstanceScopedAspect
{
    [IntroduceMember(Visibility = Visibility.Family, OverrideAction = MemberOverrideAction.Ignore)]
    [CopyCustomAttributes(typeof(ImportAttribute))]
    [Import(typeof(ICache))]
    public ICache Cache { get; set; }

    [ImportMember("Cache", IsRequired = true)] 
    public Property<ICache> CacheProperty;

    public override void OnEntry(MethodExecutionArgs args)
    {
        var cache = this.CacheProperty.Get();            
    }        

    object IInstanceScopedAspect.CreateInstance(AdviceArgs adviceArgs)
    {
        return this.MemberwiseClone();
    }

    void IInstanceScopedAspect.RuntimeInitializeInstance()
    {
        var container = new UnityContainer();
        container.LoadConfiguration();

        var distributedCache = container.Resolve<DistributedCache>();
        this.CacheProperty.Set(distributedCache);
    }
}
[可序列化]
公共类CacheAspect:OnMethodBoundaryAspect,IInstanceScopedAspect
{
[简介成员(可见性=可见性.族,重写操作=成员重写操作.忽略)]
[CopyCustomAttributes(typeof(ImportAttribute))]
[导入(类型(ICache))]
公共ICache缓存{get;set;}
[导入成员(“缓存”,IsRequired=true)]
公共财产;
public override void OnEntry(MethodExecutionArgs args)
{
var cache=this.CacheProperty.Get();
}        
对象IInstanceScopedSpect.CreateInstance(AdviceArgs AdviceArgs)
{
返回此.MemberwiseClone();
}
void iInstanceScopedSpect.RuntimeInitializeInstance()无效
{
var container=new UnityContainer();
container.LoadConfiguration();
var distributedCache=container.Resolve();
this.CacheProperty.Set(distributedCache);
}
}
我的问题在于RuntimeInitializeInstance方法


我想知道在此方法中设置CacheProperty是正确的方法,还是应该采取不同的方法?

初始化方法中的
ICache
依赖项是正确的方法之一,但提供的实现效率不高,因为每次都要创建和配置一个新的容器实例

通常,让DI容器为您解析依赖项比手动设置依赖项更方便

该属性告诉PostSharp将
缓存
属性直接添加到服务类中。在运行时解析服务实例时,Unity container可以自动为您设置此
Cache
属性

您可以通过使用
[Dependency]
属性()注释Unity来设置属性值。要将该属性复制到服务类,还需要应用该属性

[IntroduceMember(Visibility = Visibility.Family, OverrideAction = MemberOverrideAction.Ignore)]
[CopyCustomAttributes(typeof(DependencyAttribute))]
[Dependency]
public ICache Cache { get; set; }
示例中的属性是从文档中复制的,并演示了MEF容器的相同原理