Ich habe einen einfachen Injektor als meinen DI-Container konfiguriert. Ich habe this gefolgt. Ich vermute, mein Problem hat mit der Registrierung des Containers zu der SimpleInjectorServiceHostFactory
zu tun. Ich benutze die Klassenbibliothek für die in der Webanwendung gehosteten Dienste. Ich habe keine .svc-Dateien, aber ich habe relative Adressen konfiguriert. Wo mache ich die Containerregistrierung?WCF: kein parameterloser Konstruktor für diese Objektabhängigkeitsinjektion definiert Einfacher Injektor
public static class ContainerBootstrap
{
public static Container Container { get; set; }
static ContainerBootstrap()
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new WcfOperationLifestyle();
container.RegisterSingleton<ITypeAdapterFactory, AutomapperTypeAdapterFactory>();
container.Register<IDepartmentService, DepartmentService>();
var typeAdapterFactory = container.GetInstance<ITypeAdapterFactory>();
TypeAdapterFactory.SetCurrent(typeAdapterFactory);
Container.Verify();
Container = container;
}
}
AutomapperTypeAdapterFactory:
public class AutomapperTypeAdapterFactory : ITypeAdapterFactory
{
public AutomapperTypeAdapterFactory()
{
var profiles = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => t.BaseType == typeof(Profile));
var config = new MapperConfiguration(cfg =>
{
foreach (var profile in profiles)
{
if (profile.FullName != "AutoMapper.SelfProfiler`2")
cfg.AddProfile(Activator.CreateInstance(profile) as Profile);
}
});
ContainerBootstrap.Container.Register<MapperConfiguration>(() => config);
ContainerBootstrap.Container.Register<IMapper>(() =>
ContainerBootstrap.Container.GetInstance<MapperConfiguration>()
.CreateMapper());
}
public ITypeAdapter Create() => new AutomapperTypeAdapter();
}
Individuelle Servicefactory
public class WcfServiceFactory : SimpleInjectorServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new SimpleInjectorServiceHost(ContainerBootstrap.Container, serviceType,
baseAddresses);
}
}
In WebHost web.config
<serviceActivations>
<add factory="Department.InstanceProviders.WcfServiceFactory"
service="Department.DepartmentService" relativeAddress="DepartmentService.svc" />
</serviceActivations>
Können Sie erklären, warum Sie eine benutzerdefinierte Fabrik haben? Warum nicht den Standard verwenden, den einfache Injektoren liefern? –
es ist eine Design-Entscheidung, es sei denn, Sie wollen mir sagen, es ist der Verlauf der [email protected] – mkaris
An dieser Stelle weiß ich nicht wirklich, ob es der Grund für die Ausnahme ist. Aber ich würde versuchen, mit dem Standard zu beginnen, um zu sehen, ob es ist. –