У меня проблемы с разрешением хранилища при вызове из консольного приложения. Все работает нормально при запуске приложения (.NET 4, C #, Entity Framework, Unity) как обычно, но я создал отдельное консольное приложение, которое будет запускаться из планировщика задач для импорта каналов. Я очень близок к тому, чтобы сдаться и заняться грязным взломом и написать скрипт для вызова веб-страницы вместо использования консольного приложения, но я подумал, что по крайней мере попытаюсь понять, почему оно не работает в первую очередь.
Я новичок в 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