加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.net – 不知道如何使用WinForm应用程序的依赖注入存储库模式工

发布时间:2020-12-14 00:49:34 所属栏目:百科 来源:网络整理
导读:(为文字墙道歉:) :)) 概要 使用依赖注入与我的Winfor应用程序正在创建大量的Repository上下文.我不知道我使用的方式是对还是错,或常见的做法是什么. 细节 在过去的6个月中,我一直在使用存储库模式来构建单元O工作模式的ASP.NET MVC应用程序.除此之外,我一直
(为文字墙道歉:) :))

概要

使用依赖注入与我的Winfor应用程序正在创建大量的Repository上下文.我不知道我使用的方式是对还是错,或常见的做法是什么.

细节

在过去的6个月中,我一直在使用存储库模式来构建单元O工作模式的ASP.NET MVC应用程序.除此之外,我一直在使用依赖注入对所有这些Web应用程序取得一些成功.

所以这是我连接我的仓库的一个例子.

public EntityFrameworkRepositoryRegistry() 
{ 
    For<IUnitOfWork>() 
            .HybridHttpOrThreadLocalScoped() // Lifecycle of the object.
            .Use<SqlServerContext>()  // My EF Context.
            .Ctor<string>("connectionString").Is("name=SqlServer_EF")
            .Ctor<string>("defaultContainerName").Is("Entities"); 

    // Ayende's EFProf application :) 
    EntityFrameworkProfiler.Initialize();      

    Scan(x => 
        { 
            x.TheCallingAssembly(); 

            x.ExcludeNamespaceContainingType<Fake.FakeContext>(); 

            x.WithDefaultConventions(); 
        } 
    );    
}

好的 – 很棒
这里要注意的主要内容是

>我假设生命周期是Web方案中正确的.
>上下文只会存在一次,每个REQUEST命中
网络服务器.

KEWL.

现在,对于我的WinForm应用程序,我最初创建了一个单一的
单位工作对象(没有依赖注入,只是),并不断传递那个宝宝
所有的服务(然后到仓库).

对于这个win应用程序,它会点击DB查找所有的文本
需要解析的文件(例如25个文件).然后,对于每个文件,它
创建一个新的解析器,读取每一行并将解析的数据插入
一个db表.精细.

问题是,这个构想在所有的分析者中都是分享的
正在严重地扔掉了整个商店的错误.

所以我添加了一些依赖注入,并使用上面的注册表代码.排序相同的事情 – 很多严重的错误.这是因为单个线程再次创建了一个上下文 – > winform.

所以,我现在调整了上下文注册表如下:

public EntityFrameworkRepositoryRegistry(bool isForTheWeb) 
{ 
    if (isForTheWeb) 
    { 
        For<IUnitOfWork>() 
            .HybridHttpOrThreadLocalScoped() 
            .Use<SqlServerContext>() 
            .Ctor<string>("connectionString").Is("name=SqlServer_EF") 
            .Ctor<string>("defaultContainerName").Is("Entities"); 
    } 
    else 
    { 
        For<IUnitOfWork>() 
            .Use<SqlServerContext>() 
            .Ctor<string>("connectionString").Is("name=SqlServer_EF") 
            .Ctor<string>("defaultContainerName").Is("Entities"); 
    } 

    EntityFrameworkProfiler.Initialize(); 

    Scan(x => 
    { 
        x.TheCallingAssembly(); 

        x.ExcludeNamespaceContainingType<Fake.FakeContext>(); 
        x.WithDefaultConventions(); 
    }); 
}

所以对于WinForm应用程序,它现在不设置生命周期.这个
然后创建了大约160左右的上下文我想! (但它没有真的
错误,或者).

所以,我不知道这是否是正确的做事方式.

所以我的应用程序实际上有25个不同的计时器来检查文件
每…说.. 10秒如果有新的数据,它解析它.
否则,在10秒钟内回来.

这些文件中的每一个都被解析,是否是自己的线程?
然后为每个线程创建一个上下文? (我觉得是类似的
Web场景).还是这样吗?我知道这是很多的上下文,但是
每个上下文并不意味着与数据库的直接连接
连接池,这不应该真的是一个问题.

它有这么多背景的原因是因为如下
代码…(和这些是一些单独的构造函数
存储库类…)

public SqlServerContext(string,string); 
public GameFileRepository (IUnitOfWork); 
public LogEntryRepository(IUnitOfWork); 
public AlertRepository(IUnitOfWork); 
... etc..

并为主要服务…

public PunkBusterParser(IUnitOfWork,IGameFileRepositry,ILogEntryRepository,ILoggingService);

所以服务需要一个UoW,每个存储库也都需要
一个..这意味着每个都创建一个新的.

我确定我没有正确地结构化…

任何建议都会真诚感谢!

Ayende的这篇文章可能会为您提供一些关于如何在桌面应用程序中管理工作单位的洞察(一般的想法是使用“每个演示者的会话”): http://msdn.microsoft.com/en-us/magazine/ee819139.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读