ActivateAnything 0.3.0

An `AnythingActivator` will make an extreme effort to find and instantiate a concrete class
which is assignable to a `Type`, whether or not the Type is concrete, whether or not the
Type has constructor dependencies, whether or not a suitable concrete subtype is found
in any currently loaded `Assembly`.

The attempt to find and instantiate suitable Types is rule-driven.

There are three kinds of `IActivateAnythingRule`.
- `IFindTypeRule` provides rules for where to look for candidate concrete subtypes of an abstract type
- `IActivateInstanceRule` simply returns an instance of a concrete type.
- `IChooseConstructorRule` rules for how to choose between constructors when a concrete `Type` has been chosen.

The <em>extremity</em> of the effort lies in its recursive attempt to find and construct the <em>dependencies</em>.

Install-Package ActivateAnything -Version 0.3.0
dotnet add package ActivateAnything --version 0.3.0
<PackageReference Include="ActivateAnything" Version="0.3.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ActivateAnything --version 0.3.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

ActivateAnything

Activate.New<T>()

…will make an extreme effort to find and instantiate a concrete class which is assignable to a Type, whether or not the Type is concrete, whether or not the Type has constructor dependencies, whether or not a suitable concrete subtype is found in any currently loaded Assembly.

The attempt to find and instantiate suitable Types is driven by three kinds of IActivateAnythingRule.

  • IActivateInstanceRule simply returns an instance of a concrete type.
  • IFindTypeRule provides rules for where to look for candidate concrete subtypes of an abstract type
  • IChooseConstructorRule rules for how to choose between constructors when a concrete Type has been chosen.

The extremity of the effort lies in its recursive attempt to find and construct the dependencies.

The default ruleset will

  • Search first the currently executing assembly, then its references, then its base directory, then the current working directory
  • Prefer constructors with more parameters over constructors with fewer.

Customise or replace the default ruleset with the provided rules or custom rules.

Example Usage

See FixtureBase : reduce the cost of Unit Testing by automating setup and the injection of fakes.

ActivateAnything

Activate.New<T>()

…will make an extreme effort to find and instantiate a concrete class which is assignable to a Type, whether or not the Type is concrete, whether or not the Type has constructor dependencies, whether or not a suitable concrete subtype is found in any currently loaded Assembly.

The attempt to find and instantiate suitable Types is driven by three kinds of IActivateAnythingRule.

  • IActivateInstanceRule simply returns an instance of a concrete type.
  • IFindTypeRule provides rules for where to look for candidate concrete subtypes of an abstract type
  • IChooseConstructorRule rules for how to choose between constructors when a concrete Type has been chosen.

The extremity of the effort lies in its recursive attempt to find and construct the dependencies.

The default ruleset will

  • Search first the currently executing assembly, then its references, then its base directory, then the current working directory
  • Prefer constructors with more parameters over constructors with fewer.

Customise or replace the default ruleset with the provided rules or custom rules.

Example Usage

See FixtureBase : reduce the cost of Unit Testing by automating setup and the injection of fakes.

Release Notes

ChangeLog
     ---------
     0.3.0 AnythingActivator.Instances as well as Rules. Breaking: refactored constructors & FixtureBase startup
     0.2.2 FixtureBase
     0.2.1.0 ActivateInstance Rule can activate a Func<Type> as well as a Type
     0.2.0.0 Expose LastActivationTree and LastErrorList after a call to New()
     0.1.0.2 fix non-public constructors. ChooseConstructorWith(Most|Fewest)ParametersAttribute.PreferPublic defaults to true.
     0.1.0.1 ActivateAnything first release.

  • .NETFramework 4.5

    • No dependencies.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on ActivateAnything:

Package Downloads
FixtureBase
Don't spend hours writing code to mock a dozen dependencies, and more hours debugging it. Just write your test code, and let FixtureBase create the dependencies for you. FixtureBase constructs your UnitUnderTest to test your codebase end-to-end, with external dependencies auto-faked and automatically injected in just the right place; even constructor dependencies that are several layers deep. You just write your tests: ``` public class FixtureBaseExample : FixtureBaseWithDbAndHttpFor<AUseCase> { [Fact] public void UUTSendsDataToDb() { var newDatum = new Datum{Id=99, Name="New!" }; UnitUnderTest.InsertDb(newDatum); Db.ShouldHaveInserted("Data",newDatum); } [Fact] public void UUTreturnsDataFromDbQuerySingleColumn() { var dbData = new[] { "row1", "row2", "row3", "row4"}; Db.SetUpForQuerySingleColumn(dbData); UnitUnderTest.FromDbStrings().ShouldEqualByValue(dbData); } [Fact] public async Task UUTGetHttpReturnsDataFromService() { var contentFromService = "IGotThis!"; HttpClient .Setup(m => true) .Returns(new HttpResponseMessage(HttpStatusCode.OK) {Content = new StringContent(contentFromService)}); (await UnitUnderTest.GetHttp()).ShouldBe(contentFromService); HttpClient.Verify(x=>x.Method==HttpMethod.Get); } } ```   The included examples demonstrate FixtureBases for applications which depend on Ado.Net IDbConnections and on HttpClient network connections. - To create your own FixtureBase with your own preferred Fakes, see the examples at <https://github.com/chrisfcarroll/ActivateAnything/blob/master/FixtureBase/FixtureExample.cs.md> - For how it's done, see <https://github.com/chrisfcarroll/ActivateAnything/blob/master/FixtureBase/FixtureBase.cs> Construction is done by - [ActivateAnything](https://www.nuget.org/packages/ActivateAnything)   Faking is done by - [TestBase.AdoNet](https://www.nuget.org/packages/TestBase.AdoNet) - [TestBase.HttpClient.Fake](https://www.nuget.org/packages/TestBase.HttpClient.Fake) For more tools focussed on cutting the cost of unit testing, see also: - [TestBase](https://www.nuget.org/packages/TestBase) - [TestBase.AspNetCore.Mvc](https://www.nuget.org/packages/TestBase.AspNetCore.Mvc) - [TestBase-Mvc](https://www.nuget.org/packages/TestBase-Mvc) - [TestBase.AdoNet](https://www.nuget.org/packages/TestBase.AdoNet) - [TestBase.HttpClient.Fake](https://www.nuget.org/packages/TestBase.HttpClient.Fake) - [Serilog.Sinks.ListOfString](https://www.nuget.org/packages/Serilog.Sinks.Listofstring) - [Extensions.Logging.ListOfString](https://www.nuget.org/packages/Extensions.Logging.ListOfString)

GitHub repositories

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
0.3.0 659 11/26/2018
0.2.1 280 11/23/2018
0.2.0 294 11/21/2018
0.1.0.1 257 11/17/2018