콘솔 앱에서 저장소를 호출 할 때 문제가 발생합니다. 응용 프로그램 (.NET 4, C#, Entity Framework, Unity)을 정상적으로 실행하면 모든 것이 잘 작동하지만 작업 스케줄러에서 피드를 가져 오기 위해 실행할 독립 실행 형 콘솔 앱을 만들었습니다. 나는 포기하고 더러운 해킹을하고 콘솔 앱을 사용하는 대신 웹 페이지를 호출하는 스크립트를 작성하지만, 적어도 내가 왜 먼저 작동하지 않는지 이해하려고 노력할 것이라고 생각했습니다.콘솔 앱에서 리포지토리를 확인할 때 Microsoft Unity 오류 발생 - NullReferenceException
저는 Entity Framework와 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>>();
무엇이 잘못되었는지 이해하는 데 도움이 될 수있어서 매우 감사 할 것입니다!
UPDATE :
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;
}
은 아마도 그것을 수행하는 HttpContext를가 : 여기
는 초기화 클래스의 (중요) 비트입니까?
감사합니다,
Annelie 두 개의 서로 다른 Initialise
클래스를 만드는 고려할 수
InitialiseContainer()에 대한 코드를 제공 할 수 있습니까? –
@ John Allers - 초기 코드를 업데이트하겠다. (거대한 함수이므로 줄이자. 그러나 모든 중요한 것들이 있어야한다.) – annelie