ich mehrere Projekte in meiner Lösung haben:Register Schnittstelle in Unity Container basierend auf Marker-Schnittstelle in verschiedenen Lebenszeit
Core
Repository
Service
WebAPi
Meine Unity Registrierung ist auf WebAPI Project.
Was ich versuche zu erreichen ist etwas, was ich in Schloss Windsor in der Vergangenheit getan haben, jetzt will ich über Unity das tun: Registrieren Schnittstelle Konvention https://github.com/castleproject/Windsor/blob/master/docs/registering-components-by-conventions.md
Ich habe zwei Marker-Schnittstellen.
public interface ISingletonDependency{}
public interface ITransientDependency{}
Für die Klassen in meinem Repository oder Service I tun:
public interface IPersonRepository:ISingletonDependency{
...
...
}
public class PersonRepository: IPersonRepository{
...
...
...
}
In meiner Dienstklasse:
public interface IPersonService:ISingletonDependency{
...
...
}
public class PersonService: IPersonService{
...
...
...
}
ich dies tun für alle meine Klassen in ähnlicher Weise für DI und während der Registrierung habe ich das gemacht:
container.Register(
Classes.NamedAssembly("SolutionName.Repository")
.BasedOn<ISingletonDependency>()
.WithService.FromInterface().LifestyleSingleton()
);
container.Register(
Classes.NamedAssembly("SolutionName.Service")
.BasedOn<ISingletonDependency>()
.WithService.FromInterface().LifestyleSingleton()
);
container.Register(
Classes.NamedAssembly("SolutionName.Repository")
.BasedOn<ITransientDependency>()
.WithService.FromInterface().LifestyleTansient()
);
container.Register(
Classes.NamedAssembly("SolutionName.Service")
.BasedOn<ITransientDependency>()
.WithService.FromInterface().LifestyleTansient()
);
So muss ich das nicht für jeden einzelnen tun, ich habe Ansatz in Unity gesehen, aber es basiert auf der Namenskonvention und Sie können Singleton oder Transient Lifestyle nicht separat angeben.
https://blogs.msdn.microsoft.com/agile/2013/03/12/unity-configuration-registration-by-convention/
Gibt es eine Möglichkeit zu tun, was Sie in Schloss Windsor, wie im obigen Beispiel tun können, ich gab, basierend auf Marker-Schnittstellen?
'i in Castle windsor in Vergangenheit getan haben, jetzt möchte ich über Unity, das zu tun .. .' - Warum ziehen Sie von einem vollständig unterstützten DI-Container zu einem * toten * Container? Unity wird nicht mehr unterstützt (https://github.com/unitycontainer/unity/issues) und selbst wenn es war, war es in Features sehr weit zurück. Microsoft [gab den Support dafür auf] (https://blogs.msdn.microsoft.com/dotnet/2015/08/21/the-future-of-unity/), aber die neuen Besitzer kümmern sich nicht darum, es zu unterstützen entweder - seit anderthalb Jahren gab es kein Commit mehr. – NightOwl888
+100 für @ NightOwl888's Kommentar :) – Steven