Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从控制台应用解析存储库时出现Microsoft Unity错误-NullReferenceException_C#_.net_.net 4.0_Unity Container - Fatal编程技术网

C# 从控制台应用解析存储库时出现Microsoft Unity错误-NullReferenceException

C# 从控制台应用解析存储库时出现Microsoft Unity错误-NullReferenceException,c#,.net,.net-4.0,unity-container,C#,.net,.net 4.0,Unity Container,从控制台应用程序调用存储库时,我在解析存储库时遇到问题。正常运行应用程序(.net4,C#,entityframework,Unity)时一切正常,但我创建了一个独立的控制台应用程序,它将从任务调度器运行以导入提要。我很快就要放弃了,我做了一个肮脏的黑客,写了一个脚本来调用网页,而不是使用控制台应用程序,但我想我至少应该先试着理解为什么它不起作用 我对实体框架和Unity都是新手,所以请容忍我,如果我遗漏了任何重要信息,请告诉我 这就是我得到的错误: Resolution of the depe

从控制台应用程序调用存储库时,我在解析存储库时遇到问题。正常运行应用程序(.net4,C#,entityframework,Unity)时一切正常,但我创建了一个独立的控制台应用程序,它将从任务调度器运行以导入提要。我很快就要放弃了,我做了一个肮脏的黑客,写了一个脚本来调用网页,而不是使用控制台应用程序,但我想我至少应该先试着理解为什么它不起作用

我对实体框架和Unity都是新手,所以请容忍我,如果我遗漏了任何重要信息,请告诉我

这就是我得到的错误:

Resolution of the dependency failed, type = "MyNamespace.Domain.Template.IRepository`2[MyNamespace.Domain.Employees.OrganisationalUnit,System.Guid]", name = "(none)".
Exception occurred while: while resolving.
Exception is: NullReferenceException - Object reference not set to an instance of an object.

at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, ResolverOverride[] overrides)
at MyNamespace.Infrastructure.FeedDefinition.GetOrganisationalUnit(String name, OrganisationalUnit parent) in C:\FeedDefinition.cs:line 552
这是控制台应用程序代码:

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        MyNamespace.Appliance.Configuration.Initialise.InitialiseContainer();

        ImportFeedProcessor importFeedProcessor = new ImportFeedProcessor();

        importFeedProcessor.Run(args[0]);
    }
}
这就是它失败的地方:

IRepository<OrganisationalUnit, Guid> organisationalUnitRepository = 
    Context.Instance.Container.Resolve<IRepository<OrganisationalUnit, Guid>>();
i存储组织单元存储库=
Context.Instance.Container.Resolve();
如果有人能帮助我了解出了什么问题,我将非常感激

更新:

下面是初始化类中的(重要)位:

public static void InitialiseContainer()
{
    UnityContainer container = new UnityContainer();

    // Use HttpContext for registering instances against for live
    IContext context = HttpContextWrapper.Instance;

    // Register the HttpContext as the default context to use
    container.RegisterInstance<IContext>(HttpContextWrapper.Instance);

    // repositories
    container.RegisterType<IRepository<Employee, Guid>, EmployeeRepository>(
        new UnityContextLifetimeManager(context),
                new InjectionConstructor(true, "OrganisationalUnit.Parent.Parent"));
    container.RegisterType<IRepository<OrganisationalUnit, Guid>, EntityFrameworkRepository<OrganisationalUnit, Guid>>(
                new UnityContextLifetimeManager(context),
                new InjectionConstructor("Parent.Parent"));

    // Create and populate a new Unity container from configuration
    Context.Instance.Container = container;
}
publicstaticvoidinitialisecontainer()
{
UnityContainer容器=新的UnityContainer();
//使用HttpContext注册live的实例
IContext context=HttpContextWrapper.Instance;
//将HttpContext注册为要使用的默认上下文
RegisterInstance(HttpContextWrapper.Instance);
//存储库
container.RegisterType(
新的UnityContextLifetimeManager(上下文),
新的注入构造函数(true,“OrganizationalUnit.Parent.Parent”);
container.RegisterType(
新的UnityContextLifetimeManager(上下文),
新的注入构造函数(“Parent.Parent”);
//根据配置创建并填充新的Unity容器
Context.Instance.Container=容器;
}
是HttpContext做的吗

谢谢


Anelie

< P>您可以考虑创建两个不同的<代码> Initialise < /Class >类(我猜这是您的Unity PoTrasPlass类)。

您拥有的一个可以用于您的web应用程序


另一个应该是非特定于web的。删除任何引用“代码> HTTP上下文< /代码>(它将不能在控制台应用程序中使用)和<代码> unyTeClExtTimeMeMaGeAs/COD>(假设这是“代码> HTTPixEng/<代码>”)。您可以考虑的一个选项是创建两个不同的<代码> Initialise < /Class >类(我猜这是您的统一引导程序类)。

您拥有的一个可以用于您的web应用程序


另一个应该是非特定于web的。删除对
HttpContext
(在控制台应用程序中不可用)和
UnityContextLifetimeManager
(假设这也是特定于
HttpContext
)的任何引用。

您能提供InitialiseContainer()的代码吗?@John Allers-我将用初始化代码更新(因为它是一个庞大的函数,所以删减,但所有重要的东西都应该在那里)。你能提供InitialiseContainer()的代码吗?@John Allers-我会用初始化代码更新(因为它是一个庞大的函数,所以删减,但所有重要的东西都应该在那里).谢谢,我应该早就意识到这一点,因为我们有不同的初始化容器用于单元测试,它们工作得很好,但直到我在这里复制代码时我才想到这一点!我现在遇到了一个Linq错误,但至少我更接近了,所以谢谢!:)谢谢,我早就应该意识到这一点,因为我们有不同的初始化容器用于单元测试,这些容器工作得很好,但直到我在这里复制了代码,我才想到它!我现在得到一个Linq错误,但至少我更接近了,所以谢谢!:)