Table of Contents

Class DynamicCodeRoot

Namespace
ToSic.Sxc.Code
Assembly
ToSic.Sxc.dll

Base class for any dynamic code root objects.
Root objects are the ones compiled by 2sxc - like the RazorComponent or ApiController.
If you create code for dynamic compilation, you'll always inherit from ToSic.Sxc.Dnn.DynamicCode. Note that other DynamicCode objects like RazorComponent or ApiController reference this object for all the interface methods of IDynamicCode.

[PublicApi]
public abstract class DynamicCodeRoot : ServiceBase<DynamicCodeRoot.MyServices>, IHasLog
Inheritance
DynamicCodeRoot
Implements

Properties

AllSettings

public ITypedStack AllSettings { get; }

Property Value

ITypedStack

App

A fully prepared IApp object letting you access all the data and queries in the current app.

public IApp App { get; }

Property Value

IApp

The current app

Content

The content object of the current razor view - IF the current view has content. If the view is a list, it will return the first item. Will be null otherwise. To tell if it's the demo/default item, use IsDemoItem.

public dynamic Content { get; }

Property Value

dynamic

A IDynamicEntity object with the current content - or null.

Convert

Conversion helper for common data conversions in Razor and WebAPIs

public IConvertService Convert { get; }

Property Value

IConvertService

Remarks

Added in 2sxc 12.05

CreateInstancePath

Location of the current code. This is important when trying to create instances for other code in relative folders - as this is usually not known.

public string CreateInstancePath { get; set; }

Property Value

string

The real path to the currently executed code - important for dynamically compiled code like WebApis

Data

The data prepared for the current Code. Usually user data which was manually added to the instance, but can also be a query.

public IBlockRun Data { get; }

Property Value

IBlockRun

An IBlockRun which is as IDataSource.

Edit

Helper commands to enable in-page editing functionality Use it to check if edit is enabled, generate context-json infos and provide toolbar buttons

public IEditService Edit { get; }

Property Value

IEditService

An IEditService object.

Header

The header object of the current razor view, if it's a list and has a header object. If it's a list and doesn't have a header (and no default), it will return null. To tell if it's the demo/default item, use IsDemoItem.

public dynamic Header { get; }

Property Value

dynamic

A IDynamicEntity object with the current content.

Remarks

Introduced in 2sxc 10.10 - previously it was called ListContent, now deprecated.

Link helper object to create the correct links

public ILinkService Link { get; }

Property Value

ILinkService

A ILinkService object.

Resources

[PublicApi]
public IDynamicStack Resources { get; }

Property Value

IDynamicStack

Settings

[PublicApi]
public IDynamicStack Settings { get; }

Property Value

IDynamicStack

Methods

AsAdam(ICanBeEntity, string)

Provides an Adam instance for this item and field

public IFolder AsAdam(ICanBeEntity item, string fieldName)

Parameters

item ICanBeEntity

The item - an IEntity, IDynamicEntity, ITypedItem etc. often Content or similar

fieldName string

The field name, like "Gallery" or "Pics"

Returns

IFolder

An Adam object for navigating the assets

AsDynamic(object)

Convert a dynamic entity and return itself again. This is so coders don't have to worry if the original object was an IEntity or a IDynamicEntity in the first place.

public dynamic AsDynamic(object dynamicEntity)

Parameters

dynamicEntity object

the original object

Returns

dynamic

a dynamic object for easier coding

AsDynamic(params object[])

Convert one or many Entities and Dynamic entities into an IDynamicStack

public dynamic AsDynamic(params object[] entities)

Parameters

entities object[]

one or more source object

Returns

dynamic

a dynamic object for easier coding

Remarks

New in 12.05

AsDynamic(string, string)

Take a json and provide it as a dynamic object to the code

public dynamic AsDynamic(string json, string fallback = null)

Parameters

json string

the original json string

fallback string

Alternate string to use, if the original json can't parse. Can also be null or the word "error" if you would prefer an error to be thrown.

Returns

dynamic

A dynamic object representing the original json. If it can't be parsed, it will parse the fallback, which by default is an empty empty dynamic object. If you provide null for the fallback, then you will get null back.

Remarks

Added in 2sxc 10.22.00

AsDynamic(IEntity)

Wraps an entity into a IDynamicEntity

public dynamic AsDynamic(IEntity entity)

Parameters

entity IEntity

the original object

Returns

dynamic

a dynamic object for easier coding

AsEntity(object)

Unwraps a dynamic entity or ITypedItem back into the underlying IEntity

public IEntity AsEntity(object dynamicEntity)

Parameters

dynamicEntity object

the wrapped IEntity

Returns

IEntity

A normal IEntity

AsList(object)

Converts a list of IEntity objects into a list of IDynamicEntity objects.

public IEnumerable<dynamic> AsList(object list)

Parameters

list object

typically a List/IEnumerable of Entities or DynamicEntities.
Can also be a IDataSource in which case it uses the default stream.

Returns

IEnumerable<dynamic>

a list of IDynamicEntity objects

Remarks

Added in 2sxc 10.21.00

CreateInstance(string, NoParamOrder, string, string, bool)

Create an instance of code lying in a file near this

public dynamic CreateInstance(string virtualPath, NoParamOrder noParamOrder = default, string name = null, string relativePath = null, bool throwOnError = true)

Parameters

virtualPath string

path to the other code file to compile

noParamOrder NoParamOrder

see Convention: Named Parameters

name string

Override the class name to compile - usually not required as it should match the file name

relativePath string

optional relative path, will usually use the ToSic.Sxc.Code.Internal.IGetCodePath.CreateInstancePath

throwOnError bool

throw errors if compiling fails, recommended

Returns

dynamic

An object of the class in the file

Remarks

Note that the C# code which we are creating inherits from a standard base class such as Code12 or DynamicCode then it will automatically be initialized to support App, AsDynamic etc.

CreateSource<T>(IDataSource, ILookUpEngine)

Create a IDataSource which will process data from the given stream.

public T CreateSource<T>(IDataSource inSource = null, ILookUpEngine configurationProvider = null) where T : IDataSource

Parameters

inSource IDataSource

The data source which will be the default In of the new data-source.

configurationProvider ILookUpEngine

An alternate configuration provider for the DataSource

Returns

T

A typed DataSource object

Type Parameters

T

A data-source type - must be inherited from IDataSource

CreateSource<T>(IDataStream)

Create a IDataSource which will process data from the given stream.

public T CreateSource<T>(IDataStream source) where T : IDataSource

Parameters

source IDataStream

The stream which will be the default In of the new data-source.

Returns

T

A typed DataSource object

Type Parameters

T

A data-source type - must be inherited from IDataSource

GetService<TService>()

Get a service from the Dependency Injection. The service can come from 2sxc, EAV or the underlying platform (Dnn, Oqtane).

public TService GetService<TService>() where TService : class

Returns

TService

An object of the type or interface requested, or null if not found in the DI.

Type Parameters

TService

Interface (preferred) or Class which is needed