我目前正在重新分解一个已有几年历史的应用程序,这样我们就可以使用依赖注入(我是新手)来注入我想要使用的同步提供程序。
我很难解决如何设置接口和工厂,因为我正在处理的类有多个构造函数。
我会尽我所能把这件事说清楚。我有一个同步类,它通过应用程序的多个部分访问,其中有4个构造函数,它们都被使用。
Sync.cs
public class Sync : ISync
{
private static Hashtable _locks = new Hashtable();
private CSettings _cs = null;
private RemovedCallback _callback = null;
protected object _cObject = null;
protected bool _isLocked = false;
private DateTime _expires = DateTime.MinValue;
public Sync() { }
public Sync(CSettings cs) : this(cs, null) { }
public Sync(CSettings cs, RemovedCallback callback)
{
Callback = callback;
Settings = cs;
}
public Sync(string key)
{
Settings = new CSettings();
Settings.Key = key;
}
public object Object
{
get { return Get(); }
set { Set(value); }
}
public void Get()
{
}
public void Set()
{
}
//other methods, some that reference Remove and Set
}ISync.cs
public interface ICacheSync : IDisposable
{
object Get();
void Set(object obj);
}SyncProvider.cs
public class SyncProvider : ISync
{
public override object Get()
{
//some code
}
public override void Set(object obj)
{
//some code
}
}在同步类中,对于我注入的每个同步提供程序,Get和Set方法将是不同的。Sync类的其余部分需要保持不变。
我的最终目标是能够以不同的方式注入使用、Get、和Set的不同的同步提供者。
当前,在整个项目中引用Sync类的方式如下:
示例1
using (Sync sync = new Sync(CSettings, ItemRemoved))
{
//some code
}示例2
using (Sync sync = new Sync(CSettings))
{
sync.Remove();
}示例3
using (Sync sync = new Sync(string))
{
sync.Remove();
}我正在使用Ninject,并且尝试过一种创建接口和注入的方法,但是它似乎不起作用,因为我总是以对象引用而不是对象错误的实例来结束。
任何关于如何进行这方面的帮助或指导都将极大地帮助我更好地理解DI。
发布于 2012-11-15 11:59:12
在这种情况下,我建议您使用Factory,而不是依赖注入。
工厂本身可以注入到当前构造同步实例的类中,但与其直接“新建”同步对象,不如将其委托给SyncFactory:
using (Sync sync = this.syncFactory.Create(CSettings, ItemRemoved))
{
//some code
}
using (Sync sync = this.syncFactory.Create(CSettings))
{
//some code
}
using (Sync sync = this.syncFactory.Create(stringValue)
{
sync.Remove();
}https://stackoverflow.com/questions/13397003
复制相似问题