首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖注入项目再因素

依赖注入项目再因素
EN

Stack Overflow用户
提问于 2012-11-15 11:52:19
回答 1查看 138关注 0票数 0

我目前正在重新分解一个已有几年历史的应用程序,这样我们就可以使用依赖注入(我是新手)来注入我想要使用的同步提供程序。

我很难解决如何设置接口和工厂,因为我正在处理的类有多个构造函数。

我会尽我所能把这件事说清楚。我有一个同步类,它通过应用程序的多个部分访问,其中有4个构造函数,它们都被使用。

Sync.cs

代码语言:javascript
复制
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

代码语言:javascript
复制
public interface ICacheSync : IDisposable
{
    object Get();

    void Set(object obj);
}

SyncProvider.cs

代码语言:javascript
复制
public class SyncProvider : ISync
{
    public override object Get()
    {
         //some code
    }

    public override void Set(object obj)
    {
        //some code
    }
}

同步类中,对于我注入的每个同步提供程序,GetSet方法将是不同的。Sync类的其余部分需要保持不变。

我的最终目标是能够以不同的方式注入使用、Get、Set的不同的同步提供者。

当前,在整个项目中引用Sync类的方式如下:

示例1

代码语言:javascript
复制
using (Sync sync = new Sync(CSettings, ItemRemoved))
{
    //some code
}

示例2

代码语言:javascript
复制
using (Sync sync = new Sync(CSettings))
{
     sync.Remove();
}

示例3

代码语言:javascript
复制
using (Sync sync = new Sync(string))
{
    sync.Remove();
}

我正在使用Ninject,并且尝试过一种创建接口和注入的方法,但是它似乎不起作用,因为我总是以对象引用而不是对象错误的实例来结束。

任何关于如何进行这方面的帮助或指导都将极大地帮助我更好地理解DI。

EN

回答 1

Stack Overflow用户

发布于 2012-11-15 11:59:12

在这种情况下,我建议您使用Factory,而不是依赖注入。

工厂本身可以注入到当前构造同步实例的类中,但与其直接“新建”同步对象,不如将其委托给SyncFactory:

代码语言:javascript
复制
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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13397003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档