论坛首页 编程语言技术论坛

Naive Container 发布1.0版本

浏览 4197 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-29  
二进制文件和源代码可以从这里下载到:
http://naive.container.googlepages.com/home

存在的意义:
最简单原始的组件装配

使用:
public class Susan : ContainerBound
    {
        public void FallInLove()
        {
            Console.WriteLine("Susan has fallen in love with " + Get<Boy>().Name);
        }
    }


public class Lily : ContainerBound
    {
        public void Kiss()
        {
            Console.WriteLine("Lily is kissing {0}", Get<Boy>().Name);
        }
    }


public class Lucy : ContainerBound
    {
        public void Marry()
        {
            Console.WriteLine("Lucy is marrying " + Get<Boy>().Name);
        }
    }


配置:
Containers.GetContainerInContext<object>().Put(new GenericBoy("Van"));

Containers.GetContainerInContext<Lucy>().Put(new GenericBoy("Tom"));

Containers.GetContainerInContext<Lily>().Put(new GenericBoy("Joy"));

Containers.Close();


更多请参见项目主页
   发表时间:2007-05-10  
ContainerBound 明显引入了很多问题:

1. Susan是is a ContainerBound 还是has a ContainerBound,明显是后者,让一个class去继承一个toolkit,明显是个设计问题.

2. ContainerBound我看不是一个接口吧,这里的问题就自己想吧.
0 请登录后投票
   发表时间:2007-05-10  
ContainerBound确实不是接口,而是辅助类。

public class ContainerBound
    {
        protected T Get<T>()
        {
            return Containers.GetReadonlyContainerInContext(GetType()).Get<T>();
        }
    }

愿意继承就继承,不愿意继承就自己手工把这个Get方法添加到类的定义中去。没有什么大问题。框架的侵入性,本来就是伪问题。
0 请登录后投票
   发表时间:2007-05-10  
我只是实事求是的说而已,如果Susan和lucy要还继承Girl呢?
0 请登录后投票
   发表时间:2007-05-10  
那就自己把这个方法添加进去好了。没有强制要求从ContainerBound继承的,只是一个方便的辅助类,简化API用的。
0 请登录后投票
   发表时间:2007-05-10  
taowen 写道
那就自己把这个方法添加进去好了。没有强制要求从ContainerBound继承的,只是一个方便的辅助类,简化API用的。


所以我建议你修改例子,不然初一看会误解的。
0 请登录后投票
   发表时间:2007-05-10  
谢谢你的建议,下次写例子会写清除一些。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics