Skip to content

Commit

Permalink
SimpleInjector registration improvement
Browse files Browse the repository at this point in the history
  • Loading branch information
kaink4 committed Dec 16, 2018
1 parent 8b95fc4 commit e20498c
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 21 deletions.
85 changes: 85 additions & 0 deletions SimpleInjector.SolrNet.Tests/SimpleInjectorLifestyleTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleInjector.Lifestyles;
using SolrNet;
using Xunit;

namespace SimpleInjector.SolrNet.Tests
{
public class SimpleInjectorLifestyleTests
{
[Fact]
public void ResolveDefaultTransient()
{
var container = new Container();
container.Options.DefaultLifestyle = Lifestyle.Transient;

container.AddSolrNet("http://localhost:8983/solr");

container.Verify();

container.GetInstance<ISolrOperations<Entity>>();
}

[Fact]
public void ResolveDefaultAsyncScoped()
{
using (var container = new Container())
{
container.Options.DefaultLifestyle = Lifestyle.Scoped;
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();

container.AddSolrNet("http://localhost:8983/solr");

container.Verify();

using (AsyncScopedLifestyle.BeginScope(container))
{
var uow1 = container.GetInstance<ISolrOperations<Entity>>();
}
}
}

[Fact]
public void ResolveDefaultThreadScoped()
{
using (var container = new Container())
{
container.Options.DefaultLifestyle = Lifestyle.Scoped;
container.Options.DefaultScopedLifestyle = new ThreadScopedLifestyle();

container.AddSolrNet("http://localhost:8983/solr");

container.Verify();

using (ThreadScopedLifestyle.BeginScope(container))
{
var uow1 = container.GetInstance<ISolrOperations<Entity>>();
}
}
}

[Fact]
public void ResolveDefaultSingleton()
{
using (var container = new Container())
{
container.Options.DefaultLifestyle = Lifestyle.Singleton;

container.AddSolrNet("http://localhost:8983/solr");

container.Verify();

using (ThreadScopedLifestyle.BeginScope(container))
{
var uow1 = container.GetInstance<ISolrOperations<Entity>>();
}
}
}

public class Entity { }
}
}
42 changes: 21 additions & 21 deletions SimpleInjector.SolrNet/ContainerExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,33 +32,33 @@ private static Container AddSolrNet(this Container container, IEnumerable<SolrCo
if (container == null) throw new ArgumentNullException(nameof(container));

container.Register<IReadOnlyMappingManager>(() => new MemoizingMappingManager(new AttributesMappingManager()), Lifestyle.Singleton);
container.Register<ISolrDocumentPropertyVisitor, DefaultDocumentVisitor>(Lifestyle.Transient);
container.Register<ISolrFieldParser, DefaultFieldParser>(Lifestyle.Transient);
container.Register(typeof(ISolrDocumentActivator<>), typeof(SolrDocumentActivator<>), Lifestyle.Transient);
container.Register<ISolrDocumentPropertyVisitor, DefaultDocumentVisitor>();
container.Register<ISolrFieldParser, DefaultFieldParser>();
container.Register(typeof(ISolrDocumentActivator<>), typeof(SolrDocumentActivator<>));
container.RegisterConditional(typeof(ISolrDocumentResponseParser<>), typeof(SolrDocumentResponseParser<>), c => !c.Handled);

container.Register<ISolrDocumentResponseParser<Dictionary<string, object>>, SolrDictionaryDocumentResponseParser>(Lifestyle.Transient);
container.Register<ISolrFieldSerializer, DefaultFieldSerializer>(Lifestyle.Transient);
container.Register<ISolrQuerySerializer, DefaultQuerySerializer>(Lifestyle.Transient);
container.Register<ISolrFacetQuerySerializer, DefaultFacetQuerySerializer>(Lifestyle.Transient);
container.Register(typeof(ISolrAbstractResponseParser<>), typeof(DefaultResponseParser<>), Lifestyle.Transient);
container.Register<ISolrDocumentResponseParser<Dictionary<string, object>>, SolrDictionaryDocumentResponseParser>();
container.Register<ISolrFieldSerializer, DefaultFieldSerializer>();
container.Register<ISolrQuerySerializer, DefaultQuerySerializer>();
container.Register<ISolrFacetQuerySerializer, DefaultFacetQuerySerializer>();
container.Register(typeof(ISolrAbstractResponseParser<>), typeof(DefaultResponseParser<>));
container.Collection.Register(typeof(ISolrAbstractResponseParser<>), new[] { typeof(DefaultResponseParser<>) });
container.Register<ISolrHeaderResponseParser, HeaderResponseParser<string>>(Lifestyle.Transient);
container.Register<ISolrExtractResponseParser, ExtractResponseParser>(Lifestyle.Transient);
container.Register<ISolrHeaderResponseParser, HeaderResponseParser<string>>();
container.Register<ISolrExtractResponseParser, ExtractResponseParser>();
var p = new[] {
typeof(MappedPropertiesIsInSolrSchemaRule),
typeof(RequiredFieldsAreMappedRule),
typeof(UniqueKeyMatchesMappingRule),
typeof(MultivaluedMappedToCollectionRule),
};
container.Collection.Register(typeof(IValidationRule), p);
container.Register(typeof(ISolrMoreLikeThisHandlerQueryResultsParser<>), typeof(SolrMoreLikeThisHandlerQueryResultsParser<>), Lifestyle.Transient);
container.Register(typeof(ISolrMoreLikeThisHandlerQueryResultsParser<>), typeof(SolrMoreLikeThisHandlerQueryResultsParser<>));
container.RegisterConditional(typeof(ISolrDocumentSerializer<>), typeof(SolrDocumentSerializer<>), c => !c.Handled);
container.Register<ISolrDocumentSerializer<Dictionary<string, object>>, SolrDictionarySerializer>(Lifestyle.Transient);
container.Register<ISolrDocumentSerializer<Dictionary<string, object>>, SolrDictionarySerializer>();

container.Register<ISolrSchemaParser, SolrSchemaParser>(Lifestyle.Transient);
container.Register<ISolrDIHStatusParser, SolrDIHStatusParser>(Lifestyle.Transient);
container.Register<IMappingValidator, MappingValidator>(Lifestyle.Transient);
container.Register<ISolrSchemaParser, SolrSchemaParser>();
container.Register<ISolrDIHStatusParser, SolrDIHStatusParser>();
container.Register<IMappingValidator, MappingValidator>();

if (!cores.Any()) return container;

Expand All @@ -70,12 +70,12 @@ private static Container AddSolrNet(this Container container, IEnumerable<SolrCo
var connection = new AutoSolrConnection(cores.Single().Url);
//Bind single type to a single url, prevent breaking existing functionality
container.Register<ISolrConnection>(() => connection, Lifestyle.Singleton);
container.Register(typeof(ISolrQueryExecuter<>), typeof(SolrQueryExecuter<>), Lifestyle.Transient);
container.Register(typeof(ISolrBasicOperations<>), typeof(SolrBasicServer<>), Lifestyle.Transient);
container.Register(typeof(ISolrBasicReadOnlyOperations<>), typeof(SolrBasicServer<>), Lifestyle.Transient);
container.Register(typeof(ISolrOperations<>), typeof(SolrServer<>), Lifestyle.Transient);
container.Register(typeof(ISolrReadOnlyOperations<>), typeof(SolrServer<>), Lifestyle.Transient);
container.Register(typeof(ISolrQueryExecuter<>), typeof(SolrQueryExecuter<>));
container.Register(typeof(ISolrBasicOperations<>), typeof(SolrBasicServer<>));
container.Register(typeof(ISolrBasicReadOnlyOperations<>), typeof(SolrBasicServer<>));
container.Register(typeof(ISolrOperations<>), typeof(SolrServer<>));
container.Register(typeof(ISolrReadOnlyOperations<>), typeof(SolrServer<>));

if (setupAction != null)
{
var options = new SolrNetOptions(connection.HttpClient);
Expand Down

0 comments on commit e20498c

Please sign in to comment.