public class ServicesFactory<TInterface, TClass> where TInterface : class where TClass : TInterface { private static TInterface _instance; public static TInterface Instance { get { TInterface instanceTmp = Activator.CreateInstance<TClass>(); if (_instance == null || _instance.GetType().FullName != instanceTmp.GetType().FullName) { _instance = instanceTmp; } return _instance; } } }
你这个代码是干什么用的?ioc也不像,单例也不是。
既使用泛型注入的方式使用了工厂模式的思想、也实现了单例
@放飞吧,梦想!:
你说的貌似没一个符合。这个不是注入,不是工厂,连单例实现的也是有问题的。
注入解决的是依赖,但你这边调用时候还是会出现对接口实现对象的依赖。
工厂缺少抽象产品,打到顶了也就勉强算个简单工厂
单例上未做确保,可能会实例化出来多个对象
针对你的这种场景建议直接使用现成的ioc框架,比如ms自己的unity。
@Daniel Cai: 也行你说的对,但是通过调试来看确实实现了接口分离、对象实例化单一,而且支持种多接口调用的方便。你可以交互执行一下,对于我认为来说:接口就是协议。为什么不用抽象类,这个原因显而易见的。目的本身就是不允许继承的
@Daniel Cai: 希望你能让我明白
@放飞吧,梦想!:我没说要用抽象类。我的意思是工厂不是简单的template方法,这个和抽象类是两码事。
这样做会带来一些困扰:假如 ClassA和ClassB都实现了IInterface接口,那么:
var a=WStockFactory<IInterface>.GetInstance<ClassA>();//将获得ClassA的实例;
紧接着
var b=WStockFactory<IInterface>.GetInstance<ClassB>();//仍然会获得ClassA的实例;
也就是说 a==b; 那我显式的去GetInstance<ClassB>就毫无意义,并且容易产生误导。
对对,你说的对,我要改进下