c# - 默认存储库类的扩展

标签 c# .net entity-framework

我正在使用带有接口(interface)的存储库模式,我正在使用结构图以便在它们之间进行映射。

在我的 global.asax 中我定义了:

    ObjectFactory.Initialize(x =>
        {
            x.For<IUnitOfWorkFactory>().Use<EFUnitOfWorkFactory>();
            x.For(typeof(IRepository<>)).Use(typeof(EFRepository<>)
        }
    );

现在我想向 MyEntity 实体添加另一个数据库方法。所以我创建了 MyEntityRepository:

class MyEntityRepository:EFRepository<MyEntity>, IMyEntityRepository {
    public void CloseCall(long callId) {
        ....
        ....
    }
}

但是现在,我强制在structuremap 的初始化中添加了一个新行。我有很多这样的情况,而且structuremap初始化的行数越来越大。

此外,大多数情况只是一种方法添加,但这种单一方法添加需要新存储库的接口(interface)、新文件中的实现以及结构图的另一次初始化 - 一种方法需要大量工作。

我该如何解决这个问题?

我做错了什么吗?

也许最好使用 Repository 的扩展方法(如果有这样的东西扩展到 generic..)?

最佳答案

如果你有特殊的接口(interface),必须用特殊类型解析,你必须总是在某处写代码来初始化它。如果您不想在 StructureMap 初始化中编写太多代码,请为 DAL 层使用抽象工厂模式:

工厂接口(interface):

public interface IDalFactory
{
    IXXXRepository XXXRepository { get; }
    IYYYRepository YYYRepository { get; }
} 

实现:

public class DalFactory : IDalFactory
{
    private IXXXRepository _xxxRepository;
    public IXXXRepository XXXRepository
    {
        return _xxxRepository ?? (_xxxRepository = new XXXRepository());
    }

    private IYYYRepository _yyyRepository;
    public IYYYRepository YYYRepository
    {
        return _yyyRepository ?? (_yyyRepository = new YYYRepository());
    }
}

然后您将初始化您的 IoC:

ObjectFactory.Initialize(x =>
        {
            x.For<IUnitOfWorkFactory>().Use<EFUnitOfWorkFactory>();
            x.For<IDalFactory>().Use<DalFactory>();
        }
    );

专用代码总是需要在某个地方进行自己的注册,除非您构建一些自动注册,它将使用反射搜索您的程序集并通过一些命名约定注册存储库。

关于c# - 默认存储库类的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784852/

相关文章:

c# - 如何将 HTML 转换为 XHTML?

c# - 可观察(和可取消)循环

c# - 如何在 EF Core 多对多关系中对删除进行建模?

c# - 基于 Entity Framework 中的某些过滤器的多个实体的动态连接

asp.net - 在应用程序级别之外注册为allowDefinition ='MachineToApplication'的部分

c# - 具有多个参数的转换器

c# - 用户控件事件处理程序在回发时丢失

c# - Newtonsoft.Json 在序列化数组的中间添加省略号 (...)

c# - 这个 "Lambda Expression"是做什么的?

c# - 从 session 到成员文件夹的身份验证