本文整理汇总了C#中IDependencyResolver.IsRegistered方法的典型用法代码示例。如果您正苦于以下问题:C# IDependencyResolver.IsRegistered方法的具体用法?C# IDependencyResolver.IsRegistered怎么用?C# IDependencyResolver.IsRegistered使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDependencyResolver
的用法示例。
在下文中一共展示了IDependencyResolver.IsRegistered方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GenerateRepositories
public static void GenerateRepositories(IDependencyResolver dependencyResolver, Type defaultBaseType, Type[] constructorParams, IAppDomainHelper[] appDomainHelpers)
{
const string idPropertyName = "Id";
var interfaceToFind = typeof(IRepository<>);
var isbasetype = new Func<Type, bool>(basetype =>
basetype.IsGenericType &&
basetype.GetGenericTypeDefinition() == typeof (BaseEntity<>));
//below should work fine for all situations :)
ModuleBuilder mb = null;
var types = appDomainHelpers.SelectMany(
helper => helper.GetTypes(t => true)).ToArray();
var entities = from t in types
where t.IsClass
&& !t.IsAbstract
&& typeof (IBaseEntity).IsAssignableFrom(t)
&& !isbasetype(t)
select t;
int typeNum = 0;
foreach (var type in entities.ToArray())
{
var interfaceType = interfaceToFind.MakeGenericType(new Type[] { type });
if (interfaceType == null)
{
continue;
}
var toFind = (from i in types
where i.IsInterface &&
interfaceType.IsAssignableFrom(i)
select i).FirstOrDefault() ?? interfaceType;
if (dependencyResolver.IsRegistered(toFind))
{
//this repository is already registered, if you have multiple repositories implementing the same interface,
//you'll have to register the correct one 'by hand'
continue;
}
var repo = (from r in types
where !r.IsInterface &&
toFind.IsAssignableFrom(r)
select r
).FirstOrDefault();
if (repo == null)
{
if (mb == null)
mb = GetRepositoriesModuleBuilder();
var name = "DynamicGeneratedRepository" + typeNum++;
var baseType = defaultBaseType.MakeGenericType(new Type[] { type });
var baseConstructor = baseType.GetConstructor(constructorParams);
var tb = mb.DefineType(name, TypeAttributes.AutoLayout | TypeAttributes.Public,
baseType,
new Type[] {toFind});
var constructor = tb.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard,
constructorParams);
for (int i = 1; i <= constructorParams.Length; i++)
{
constructor.DefineParameter(i, ParameterAttributes.None, "param" + i);
}
ILGenerator ilGenerator = constructor.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldarg_0); // Load "this"
for (int i = 1; i <= constructorParams.Length; i++)
{
ilGenerator.Emit(OpCodes.Ldarg, i);
}
ilGenerator.Emit(OpCodes.Call, baseConstructor); // Call the base constructor
ilGenerator.Emit(OpCodes.Ret);
try
{
repo = tb.CreateType();
}
catch (TypeLoadException exception)
{
throw new TypeLoadException("Error creating an automatic generated Repository for " + toFind, exception);
}
}
dependencyResolver.RegisterType(interfaceType, repo);
if (interfaceType != toFind)
dependencyResolver.RegisterType(toFind, repo);
}
}
示例2: RunContainerInitializers
private static void RunContainerInitializers(IDependencyResolver dependencyResolver, IAppDomainHelper[] appdomainHelpers)
{
if (appdomainHelpers == null || appdomainHelpers.Any() )
{
var helper = AppDomainHelper.CreateDefault();
appdomainHelpers = new[] {helper};
}
if (!dependencyResolver.IsRegistered(typeof (IAppDomainHelper)))
{
foreach (var helper in appdomainHelpers)
{
dependencyResolver.RegisterInstance<IAppDomainHelper>(helper);
}
}
var allTasks =
appdomainHelpers.SelectMany(helper => helper.GetTypes(
t => t.IsClass && !t.IsAbstract && typeof (IContainerInitializer).IsAssignableFrom(t)));
//run them:
var allTasksList = allTasks as IList<Type> ?? allTasks.ToList();
var nonbocHelpers = allTasksList.Where(t => t.Namespace != null && !t.Namespace.StartsWith("BoC."));
var bocHelpers = allTasksList.Where(t => t.Namespace != null && t.Namespace.StartsWith("BoC."));
//first user's tasks:
foreach (var type in nonbocHelpers)
{
var task = CreateTask(dependencyResolver, type, appdomainHelpers);
task.Execute();
}
//now ours:
foreach (var type in bocHelpers )
{
var task = CreateTask(dependencyResolver, type, appdomainHelpers);
task.Execute();
}
}