仿制药的服务定位器

2023-12-01

我说了十几种T继承自EntityObject and IDataObject。 我有以下通用接口

IDataManager<T> where T : EntityObject, IDataObject ...

我还有数据管理器的基类

BaseDataManager<T> : IDataManager<T> where T : EntityObject, IDataObject ....

我有特定的课程

public class Result : EntityObject, IDataObject ....

public class ResultDataManager : BaseDataManager<Result> ...

我想实现服务定位器,它将返回实例IDataManager<T> for T

但我坚持如何在没有大量铸件的情况下以简洁的方式实现它。

有任何想法吗?

更新: 我曾经使用以下代码来发现类型,以便使用以前的服务定位器注册它们:

 foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())
            {
                if (type.GetInterface("ISQLDataAccessManager") != null && !type.IsAbstract)
                {
                    var manager = (ISQLDataAccessManager)Activator.CreateInstance(type);

                    _managers.Add(type, manager);

                    var typeDO = manager.GetDataObjectType();

                    _typeNames2Types.Add(typeDO.FullName, typeDO);
                    _managers2BO.Add(typeDO, manager);
                }
            }

看来我不太理解泛型的反射


如果将定位器设置为单例就可以了,那么这是一个巧妙的解决方案:

static class Locator
{
    private static class LocatorEntry<T> where T : ...
    {
        public static IDataManager<T> instance;
    }

    public static void Register<T>(IDataManager<T> instance) where T : ...
    {
        LocatorEntry<T>.instance = instance;
    }

    public static IDataManager<T> GetInstance<T>() where T : ...
    {
        return LocatorEntry<T>.instance;
    }
}

如果您无法将定位器实现为单例,我相信没有办法创建 Dictionary 并进行一些转换:

class Locator
{
    private readonly Dictionary<Type, object> instances;

    public Locator
    {
        this.instances = new Dictionary<Type, object>();
    }

    public void Register<T>(IDataManager<T> instance) where T : ...
    {
        this.instances[typeof(T)] = instance;
    }

    public IDataManager<T> GetInstance<T>() where T : ...
    {
        return (IDataManager<T>)this.instances[typeof(T)];
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仿制药的服务定位器 的相关文章

  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • .NET 4 的条件编译[重复]

    这个问题在这里已经有答案了 可能的重复 条件编译和框架目标 https stackoverflow com questions 2923210 c sharp conditional compilation and framework ta
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在

随机推荐

  • 更改标题样式 formattable R

    我正在尝试将 formattable 与物种的某些值一起使用 因此 列名称为斜体非常重要 我尝试过formatter 函数 但它只作用于值 即使我使用 th 节点而不是 span library formattable make itali
  • 月份、年份的 Windows 环境变量

    我有一个过程 定期将日志文件和屏幕截图写入文件夹创建 之间每周 30 50 个文件 文件夹结构是 Year Month filename ext 并且无法更改 我想创建一个快捷方式来粘贴在我的收藏夹中 这样我就可以快速访问该文件夹 但我需要
  • 在 Mac 10.10.3 上构建 opencv 2.4.10 失败

    我尝试使用 Xcode 6 3 在 Mac 10 10 3 上构建 opencv 2 4 10 并且构建时出现以下错误 Users Shirui work program opencv 2 4 10 modules legacy src c
  • 删除指针数组 - 我这样做对吗?

    我觉得提出有关删除指针的问题有点愚蠢 但我需要确保以正确的方式删除 因为我目前正在经历程序的调试过程 基本上我有一些指针数组 它们在我的头文件中定义如下 AsteroidView asteroidView 16 然后在 for 循环中初始化
  • 使用稳定 lambda 语法的 Symbol#to_proc 简写

    非常简短的问题 是否可以使用 Symbol to proc 简写 例如lambda upcase 使用Ruby 中的stabby lambda 语法 例如 我可以这样说 p lambda upcase 得到一个Proc in p但我找不到等
  • 从两倍小的 ImageView 获取位图图像的坐标

    我有一个图像视图含有一个Bitmap图像 该图像是其容器的两倍大 我已声明onScroll 能够四处走动Bitmap图像 我怎样才能得到坐标图像视图 on the Bitmap image Bitmap bm BitmapFactory d
  • 将标量转换为 numpy 数组的有效方法

    当我编写一个接受的函数时ndarray or scalar inputs def foo a does something to a a x dimensional array or scalar cast a x deal with a
  • 如何以六角形网格的形状绘制(x,y,z)坐标?

    例如 如果我有以下带有相应颜色的坐标 代表六边形的六边形网格 coord 0 0 0 0 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 0 1 colors Green Blue Green Green Red Green G
  • Windows 文件资源管理器到底是如何按名称排序的? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 就一次 我希望 Microsoft 的某个人说 这看起来很奇怪 看起来您可能会丢失文件 我会为此记录一个错误 在哪个宇宙中5在4之前 由 RaymondChen 提供Windows
  • 使用 JFreeChart 在 XY 空间中绘制轨迹

    我想绘制二维空间中粒子的轨迹 我的数据是 X Y 坐标序列 我想绘制它们 如果有任何指示说明如何执行此操作的示例 我们将不胜感激 An example of a locus plot can be seen below 注意 我想将路径显示
  • 如何在禁用 MongoDB 但仍安装的情况下运行 Spring?

    我正在阅读这个 Git 问题 https github com spring projects spring boot issues 7589关于Java Spring启动 我正在尝试找出一种方法来绕过启动时的崩溃 简短的版本是 如果包含创
  • 将文件数组从 android 上传到 $_FILES

    我想从我的 android 代码上传一些文件 以便它可以在 FILES 数组中使用 服务器正在以数组形式查找文件 服务器中的 php 代码如下所示 for i 0 i lt NumFiles i filename FILES fileset
  • 如何在Powershell中运行C++程序,就像CMD一样?

    就像在 CMD 中一样 要运行 C 程序 我使用以下命令g filename cpp 然后我使用命令运行它a exe 这会在 CMD 本身中打开输出 如何使用 PowerShell 来做这样的事情 我无法通过简单的命令打开文件a exe 我
  • ASP.NET 2.0 - 如何使用 app_offline.htm

    我读过有关app offline htm该文件可以放置在 NET 2 0 应用程序的根目录中 这实际上会关闭该应用程序并禁止请求任何其他页面 我已将该文件放置在根目录中 并且我的网站仍然可以加载 我进入 IIS 中的默认文档并将其设置为ap
  • 在Java中使用XML作为数据库

    我想使用 XML 文件作为数据库 我想在其中存储 ID 及其相应的字符串路径 喜欢
  • 尝试让 Laravel 5 电子邮件正常工作

    我尝试通过输入 URL 向指定用户发送电子邮件 但收到以下错误 AbstractSmtpTransport php 第 383 行中的 Swift TransportException 预期响应代码 250 但得到代码 530 消息为 53
  • JButton长按事件

    我正在 NetBeans 平台上开发 Java 桌面应用程序 我有一些JFrames并且在这些框架内我有几个JButtons 我的应用程序将在工业 PC 基于 Linux 的平板电脑等触摸屏上运行 所以我需要使用按钮的长按事件 我该如何处理
  • 将 MKAnnotation 坐标转换为视图坐标

    当用户单击图钉时 如 Zillow 应用程序 我将显示自定义 UIView 现在的问题是我需要将视图放置在实际引脚的正上方 MKAnnotationView坐标系与地图相关 如何获取相对于 iPhone 屏幕的坐标 然后将我的视图放置在该坐
  • 在不使用库的情况下以格式打印表格,SQLite 3 python

    我想以更好的格式打印数据库中的数据 这是我制作的游戏 这是代码 def read all tables self self cursor execute SELECT Name Gender Age Score Date Time FROM
  • 仿制药的服务定位器

    我说了十几种T继承自EntityObject and IDataObject 我有以下通用接口 IDataManager