Comment Inscrire ces classe Dans Autofac
Je suis en utilisant autofac comme Conteneur Ioc.
J'ai Trois Classes:
class Service
{
public Service(Repository rep,UnitOfWork context){}
}
Class Repository
{
public Repository(UnitOfWork context){}
}
class UnitOfWork{}
le Service et le Référentiel besoin de la même instance de UnitOfWork
Comment faire?
et Comment wirte dans XmlConfiguration
Je regrette, mon anglais est pauvre
OriginalL'auteur DotDot | 2012-07-26
Vous devez vous connecter pour publier un commentaire.
EDIT: j'ai lu et pensé que c'était une question sur la façon d'utiliser autofac pour enregistrer les dépendances. Si vous voulez garder la même UnitOfWork, vous avez besoin à portée de la durée de vie de l'instance à quelque chose. Si vous êtes en utilisant ce dans un ASP.NET ou WCF application, vous pouvez enregistrer vos dépendances comme ceci:
Première chose que vous devez faire afin d'utiliser un conteneur comme Autofac est d'enregistrer toutes vos dépendances. Dans Autofac vous pouvez faire un peu de moyens, mais tous reposent sur l'utilisation de l'un
ContainerBuilder
. LeContainerBuilder
s'appuie sur des méthodes d'extension, donc assurez-vous d'avoir unusing
de déclaration pour l'Autofac espace de noms.Vous pouvez définir de façon explicite les méthodes de fabrique:
À l'aide de ContainerBuilder nous avons accès à la
Register<>()
d'une méthode à l'interface de service (qui est de savoir comment nous devons nous poser le récipient pour le service) dans ce cas, je ne suis pas en utilisant des interfaces, juste le type réel. Tout moment vous demander le conteneur pour unUnitOfWork
il va utiliser la méthode de factorisationnew UnitOfWork()
d'en générer un. Dans la vraie vie, vous serait probablement demander uneIUnitOfWork
. Cela peut être un peu verbeux, mais c'est très pratique lorsque vous avez besoin d'une logique personnalisée pour la dépendance à la création.Vous pouvez utiliser le générateur comme toute autre dépendance conteneur et il suffit de s'inscrire sur les types.
Cette approche repose sur l'enregistrement de toutes les dépendances nécessaires à la construction d'une classe. Le conteneur va ensuite utiliser la réflexion pour résoudre les arguments du constructeur. Si un argument n'est pas enregistré, le conteneur va lever une exception avec le type dont il n'a pas pu résoudre. Dans ce cas, le service a une dépendance sur
UnitOfWork
etRepository
.Repository
dispose également d'une dépendance surUnitOfWork
. Ces dépendances sont exprimées comme des arguments du constructeur. Pour demander unRepository
ou unService
à partir du conteneur, toutes les dépendances doivent être enregistrésVous pouvez utiliser l'approche de configuration.
Si vous utilisez une application.fichier de configuration, vous pouvez définir votre fichier de configuration comme ceci:
Tout d'abord, notez que nous avons à définir une section de configuration (avis de l'
<ConfigSections>
). Ensuite, on peut créer un<autofac>
section qui définit l'ensemble de nos dépendances. La notation est assez simple, vous créez un<component>
pour chaque dépendance. Chaque composant a unservice
attribut qui définit le type qui vous sera demandé. Il y a aussi untype
attribut qui définit l'objet de l'être créé lorsqu'une instance de la demande de service. Ceci est analogue àbuilder.Register<UnitOfWork>(b => new UnitOfWork())
oùUnitOfWork
est le service demandé (et dans ce cas) est aussi du genre à être créé.Pour créer le générateur de rapports à l'aide de la configuration, de l'utilisation d'un
ConfigurationSettingsReader()
Vous avez à passer le nom de votre section de configuration (dans ce cas,
autofac
). Une fois que vous avez configuré les dépendances, vous avez à construire un conteneur. LeContainerBuilder
contient une méthode pour ce faire:Et une fois que vous avez le conteneur, vous pouvez demander les instances de votre service:
Programme complet:
ConfigurationSettingsReader
constructeur, d'où cela vient?stackoverflow.com/questions/39364698/... Comment faire pour Autofac 4.2?
OriginalL'auteur JaySilk84