接口:
    public interface IAbstraceCar
    {
        decimal CalculateStockValue();
    }类1:
class ShoppingCart : IAbstraceCar
    {
        protected IValueCalculator calculator;
        protected Product[] products;        public ShoppingCart(IValueCalculator calcParam)
        {
            calculator = calcParam;
        }        public virtual decimal CalculateStockValue()
        {
            products = new [] { 
            new Product() { Name = "Kayak", Price = 275M}, 
            new Product() { Name = "Lifejacket", Price = 48.95M},
            new Product() { Name = "Soccer ball", Price = 19.50M},
            new Product() { Name = "Stadium", Price = 79500M} 
                             };
            decimal totalValue = calculator.ValueProducts(products);
            return totalValue;
        }
    }
类2:
 class LimitShoppingCart:ShoppingCart
    {
        public decimal ItemLimit { get; set; }        public LimitShoppingCart(IValueCalculator calcParam)
            : base(calcParam)
        {           
        }        public override decimal CalculateStockValue()
        {
            Product[] products = { 
            new Product() { Name = "Kayak", Price = 275M}, 
            new Product() { Name = "Lifejacket", Price = 48.95M},
            new Product() { Name = "Soccer ball", Price = 19.50M},
            new Product() { Name = "Stadium", Price = 79500M} 
                             };            
            var filteredProducts = products.Where(e => e.Price < ItemLimit);
            return calculator.ValueProducts(filteredProducts.ToArray());
        } 
    }MVC中调用:
 public class ProductController : Controller
    {
        //
        // GET: /Product/        private IAbstraceCar _sc;        public ProductController(IAbstraceCar sc)
        {
            this._sc = sc;
        }
    }请问怎样可以在MVC里指定调用ShoppingCart 或者 LimitShoppingCart,因为它们都是继承同一接口,望高手指点

解决方案 »

  1.   

    new ProductController(new ShoppingCart())//sc指向ShoppingCart
    new ProductController(new LimitShoppingCart())//sc指向LimitShoppingCart
      

  2.   

    global里是这样写的:
                builder.RegisterType<LimitShoppingCart>().As<IAbstraceCar>().InstancePerHttpRequest();
                builder.RegisterType<ShoppingCart>().As<IAbstraceCar>().InstancePerHttpRequest().PreserveExistingDefaults();MVC中老是只运行LimitShoppingCart,我想我怎样可以自由的选择要运行LimitShoppingCart或者ShoppingCart
      

  3.   

    builder.Register(c => new ProductController(c.ResolveNamed<Interface>("给具体类型配置不同的名称")));
      

  4.   

    例子:    public interface ISinger { }    public class MizukiNana : ISinger { }    public class ShimotsukiHaruka : ISinger { }    public class Stage
        {
            public ISinger Singer { get; set; }        public Stage(ISinger singer)
            {
                this.Singer = singer;
            }
        }    class Program
        {
            static void Main(string[] args)
            {
                var builder = new ContainerBuilder();
                builder.RegisterType<MizukiNana>().Named<ISinger>("nana");
                builder.RegisterType<ShimotsukiHaruka>().Named<ISinger>("haruka");
                builder.Register(c => new Stage(c.ResolveNamed<ISinger>("nana")));
                var container = builder.Build();            var stage = container.Resolve<Stage>();
                Console.WriteLine(stage.Singer.ToString());
            }
        }
      

  5.   

    请问高手,如果在MVC里两个Car都要用到,要怎样写
    MVC中调用:
     public class ProductController : Controller
      {
      //
      // GET: /Product/  private IAbstraceCar _sc;  public ProductController(IAbstraceCar sc)
      {
      this._sc = sc;
      }
      }我在global里用Name的方式注册了,运行后会报错,说找不到指定的类型
      

  6.   

    builder.Register(c => new ProductController(c.ResolveNamed<ICart>("name"));
    这一步有了吗
      

  7.   

    请问KarasCanvas如果在写winform的时候要用autofac+WPF,要一个怎样的构思啊,谢谢