private void WireUpVisualStudioEvents(IVisualStudioEventProxy visualStudioEventProxy,
                                              ICodeGeneratorDependencyFactory codeGeneratorDependencyFactory)
        {
            CodeGeneratorDependency dummy;

            visualStudioEventProxy.OnCodeGenerated += (sender, args) =>
            {
                var dependency = codeGeneratorDependencyFactory.BuildDependency(args.Response);

                if (null != dependency)
                {
                    //Add Dependency
                    _codeGeneratorDependencies.AddOrUpdate(
                        dependency.TargetFile.FileName,
                        dependency,
                        (s, d) => dependency);
                }

                else if (
                    null != args.Response &&
                    null != args.Response.CodeGeneratorContext &&
                    null != args.Response.CodeGeneratorContext.Source &&
                    !args.Response.CodeGeneratorContext.Source.FileName.IsNullOrEmpty())
                {
                    //Remove Dependency
                    _codeGeneratorDependencies.TryRemove(
                        args.Response.CodeGeneratorContext.Source.FileName,
                        out dummy);
                }
            };

            visualStudioEventProxy.OnProjectItemRemoved += (sender, args) =>
            {
                if (_codeGeneratorDependencies.TryRemove(
                        args.ClassFullPath,
                        out dummy))
                {
                    _log.InfoFormat("Evicted [{0}]", args.ClassFullPath);
                }
            };

            visualStudioEventProxy.OnSolutionClosing +=
                (sender, args) =>
            {
                _log.Info("Solution closing.  Clearing cache");

                _codeGeneratorDependencies =
                    new ConcurrentDictionary <FilePath, CodeGeneratorDependency>();
            };
        }
        private void WireUpVisualStudioEvents(IVisualStudioEventProxy visualStudioEventProxy,
            ICodeGeneratorDependencyFactory codeGeneratorDependencyFactory)
        {
            CodeGeneratorDependency dummy;

            visualStudioEventProxy.OnCodeGenerated += (sender, args) =>
            {
                var dependency = codeGeneratorDependencyFactory.BuildDependency(args.Response);

                if (null != dependency)
                    //Add Dependency
                    _codeGeneratorDependencies.AddOrUpdate(
                        dependency.TargetFile.FileName,
                        dependency,
                        (s, d) => dependency);

                else if (
                    null != args.Response &&
                    null != args.Response.CodeGeneratorContext &&
                    null != args.Response.CodeGeneratorContext.Source &&
                    !args.Response.CodeGeneratorContext.Source.FileName.IsNullOrEmpty())
                    //Remove Dependency
                    _codeGeneratorDependencies.TryRemove(
                        args.Response.CodeGeneratorContext.Source.FileName,
                        out dummy);
            };

            visualStudioEventProxy.OnProjectItemRemoved += (sender, args) =>
            {
                if (_codeGeneratorDependencies.TryRemove(
                    args.ClassFullPath,
                    out dummy))
                {
                    _log.InfoFormat("Evicted [{0}]", args.ClassFullPath);
                }
            };

            visualStudioEventProxy.OnSolutionClosing +=
                (sender, args) =>
                {
                    _log.Info("Solution closing.  Clearing cache");

                    _codeGeneratorDependencies =
                        new ConcurrentDictionary<FilePath, CodeGeneratorDependency>();
                };
        }
 public CodeGeneratorDependencyManager(IVisualStudioEventProxy visualStudioEventProxy, ICodeGeneratorDependencyFactory codeGeneratorDependencyFactory)
 {
     WireUpVisualStudioEvents(visualStudioEventProxy, codeGeneratorDependencyFactory);
 }
 public CodeGeneratorDependencyManager(IVisualStudioEventProxy visualStudioEventProxy, ICodeGeneratorDependencyFactory codeGeneratorDependencyFactory)
 {
     WireUpVisualStudioEvents(visualStudioEventProxy, codeGeneratorDependencyFactory);
 }