用于非通用接口的简单注入器装饰器

Simple Injector decorator for non-generic interface

我尝试了以下但不起作用 (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 作为类型参数,这样我才能使用装饰器模式?

试试这个

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