如何在Code第一种方法中初始化全局db上下文?

时间:2015-08-24 17:48:41

标签: c# wcf entity-framework-5 repository-pattern ddd-repositories

以下是我目前正在处理的项目链接:

My Current Project

我正在关注此博客的域名驱动设计: WCF by Example

我想只创建一个名为zone的简单表,并从中检索数据。我创建了服务,存储库......文章建议的所有内容。

我想使用WCF服务遵循通用设计进行CRUD操作,所以我关注了博客。然而,恩里克爵士似乎非常忙碌。所以我得不到我想要的答案。

代码库是他项目博客的精确复制品。当我用他的实体从他的博客上运行下载时,它运行得很好。我可以看到弹出的表格。但是在根据我的需要用我的enities,dtos,serviceContract和服务改变项目之后代码不起作用。我检查了每件作品。一切似乎都很好。但每次我运行该项目时,它都会抛出异常:

lookingAt

在粗线下面:

Matcher m = p.matcher(tring);
if (!m.find()) return; // <---- Add something like this
String[] try1 = new String[m.groupCount()];

这里说Container.RequestContext为null。

恩里克爵士(博主)建议我没有正确地进行全局上下文初始化。这是我的DbContext类:

An exception of type 'System.NullReferenceException' occurred in Kiosk.Domain.dll but was not handled in user code

我浪费了一个多星期的时间。我真的不想离开域驱动模式。但我认为我没有任何其他选择放弃它。

任何人都可以解释如何为我的上述代码初始化全局上下文。

感谢数十亿人!

上面的代码对于WCF的通用模式来说真的很棒。如果这个问题得到解决,它将简化许多开发人员的工作。

编辑: 这是RequestContext类:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[InstanceCreation]
public class ZoneService: ServiceBase, IZoneService
{
    private readonly IBusinessNotifier BusinessNotifier;
    public ZoneService()
    {            
        **BusinessNotifier = Container.RequestContext.Notifier;**
    }

这是IRequestContext:

public class KioskDbContext : DbContext
{
    public IModelCreator ModelCreator { get; private set; }

    public KioskDbContext(IModelCreator modelCreator): base("kioskv1") // hardcoded db name
    {
        ModelCreator = modelCreator;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        ModelCreator.OnModelCreating(modelBuilder);            
    }
}

我猜Blogger通过XML文件初始化了RequestContext。这是来自xml文件的服务器容器和请求上下文初始化代码。 ,

public class RequestContext
    : IRequestContext
{
    public IBusinessNotifier Notifier
    {
        get
        {
            InstanceContext ic = OperationContext.Current.InstanceContext;
            InstanceCreationExtension extension = ic.Extensions.Find<InstanceCreationExtension>();
            return extension.Notifier;
        }
    }
}

0 个答案:

没有答案