使类返回不同的类型

时间:2013-12-05 15:12:48

标签: c# class oop

我想创建一个简单的DbContext类,以避免在我的存储库中重复代码。问题是我不知道如何在构造函数中初始化/配置自己然后返回自己。我只知道如何在该类中分配其他属性然后调用它。

我不确定如何恰当地表达我的问题所以随意编辑,但是我认为如果你看一下代码就会非常清楚。

正如您所看到的,我在每个查询上都在调用.GetDatabase,我想要删除.GetDatabase并让_db返回.GetDatabase返回的内容。

的DbContext

public class DbContext
{
    public DbContext()
    {
        var client = new MongoClient("mongodb://localhost");
        var server = client.GetServer();
        this.GetDatabase = server.GetDatabase("test");
    }

    public MongoDatabase GetDatabase { get; private set; }
}

存储库

public class AdministratorRepository
{
    private readonly DbContext _db = new DbContext();

    public Administrator GetByUsername(string username)
    {
        return _db.GetDatabase // I want to remove this .GetDatabase and make my _db itself return database
            .GetCollection<Administrator>("administrators")
            .FindOne(Query<Administrator>.EQ(x => x.Username, username));
    }
}

2 个答案:

答案 0 :(得分:2)

您需要向DbContext类添加一个方法:

public ?? GetCollection<T>(string collection)
{
    return _db.GetCollection<T>(collection);
}

我认为类型是MongoCollection,但我不确定。现在你可以这样做:

return _db.GetCollection<Administrator>("administrators")
        .FindOne(Query<Administrator>.EQ(x => x.Username, username));

答案 1 :(得分:0)

假设您的DbContext只是用于初始化MongoDatabase的包装器,请尝试以下操作:

public class DbContext
{
    public static MongoDatabase GetDatabase()
    {
        var client = new MongoClient("mongodb://localhost");
        var server = client.GetServer();

        return server.GetDatabase("test");
    }
}

然后在客户端代码中:

private readonly MongoDatabase _db = DbContext.GetDatabase();

此外,您最好将连接字符串和数据库名称作为参数传递,并避免在方法中对其进行硬编码。