2015-06-03 295 views
0

我嘗試了以下方法但不起作用(ActivationException)。非通用接口的簡單噴油器裝飾器

public interface IOp { object Execute(object value); } 

public class SimpleOp : IOp { public object Execute(object value) { return value; } } 

public class CompressOp : IOp { 
    private readonly IOp nextOp; 
    public CompressOp(IOp nextOp) { this.nextOp = nextOp; } 
    public object Execute(object value) 
    { 
     return this.Compress(this.nextOp.Execute(value)); 
    } 
} 

var container = new Container(); 
container.RegisterAll<IOp>(typeof(SimpleOp), typeof(CompressOp)); 
Container.RegisterDecorator(typeof(IOp), typeof(CompressOp)); 
var op = container.GetInstance<IOp>(); <-- ActivationException 

IOp接口確實不需要是泛型類型,因爲它設計爲對任何對象執行相同的處理。我必須強制它是一個通用的,然後總是使用object作爲類型參數,所以我可以使用裝飾器模式?

+1

這簡單的噴油器的版本,您使用的和請更新您的問題,它的確切異常消息,最好的堆棧跟蹤。 – Steven

回答

3

試試這個

var container = new Container(); 
container.Register<IOp, SimpleOp>(); 
Container.RegisterDecorator(typeof(IOp), typeof(CompressOp)); 
var op = container.GetInstance<IOp>(); 
+1

工程就像一個魅力。謝謝! – cnshenj

相關問題