Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Recently, I used Unity v1.2, which in my opinion is a great product. I had difficulty, however, with the configuration for a scenario I encountered. I needed an enum value to be passed to a constructor. Trying as I might, there was no way Unity was accepting my typeAlias, as such:
<unity>
<typeAliases>
<typeAlias
alias="contextType"
type="System.DirectoryServices.AccountManagement.ContextType,
System.DirectoryServices.AccountManagement, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</typeAliases>
<containers>
<container name="identitystores">
<types>
<type name="primary" type="IIdentityStore" mapTo="ActiveDirectoryIdentityStore" >
<lifetime type="singleton" />
<typeConfig
extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
Microsoft.Practices.Unity.Configuration">
<constructor>
<param name="context" parameterType="contextType">
<value
value="Domain"
type="contextType" />
</param>
</constructor>
</typeConfig>
</type>
</types>
</container>
</containers>
</unity>
For the life of me, I couldn't figure out what I did wrong. I asked in an internal discussion list, and someone mentioned writing a plain old TypeConverter... Right he was, getting my enum value to work was pretty easy. The TypeConverter (as always, comments removed for clarity and provided AS IS, etc.):
public class ContextTypeTypeConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return sourceType.GetType() == typeof(string);
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
return destinationType == typeof(ContextType);
}
public override object ConvertFrom(
ITypeDescriptorContext context,
CultureInfo culture,
object value)
{
return Enum.Parse(typeof(ContextType), (string)value);
}
public override object ConvertTo(
ITypeDescriptorContext context,
CultureInfo culture,
object value,
Type destinationType)
{
return Enum.GetName(typeof(ContextType), value);
}
}
and modified configuration file:
<unity>
<typeAliases>
<typeAlias
alias="contextType"
type="System.DirectoryServices.AccountManagement.ContextType,
System.DirectoryServices.AccountManagement, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</typeAliases>
<containers>
<containername="identitystores">
<types>
<typename="primary" type="IIdentityStore" mapTo="ActiveDirectoryIdentityStore" >
<lifetimetype="singleton" />
<typeConfig
extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
Microsoft.Practices.Unity.Configuration">
<constructor>
<param name="context" parameterType="string">
<value
value="Domain"
type="contextType"
typeConverter=" Microsoft.AccountManagement.Extensions.ContextTypeTypeConverter, <br> Microsoft.AccountManagement.Extensions, Version=1.0.0.0, <br> Culture=neutral, PublicKeyToken=4fd564a94067c21" />
</param>
</constructor>
</typeConfig>
</type>
</types>
</container>
</containers>
</unity>
That's it, now everything works just fine. HTH someone out there :)
Comments
- Anonymous
April 06, 2010
"HTH someone out there :)" It did, many thanks :)