у меня есть 2 классов для работы с данными:Виндзорский замок Комплекс регистрации для открываемых родовых типов
public class SqlDataProvider<T> : IDataProvider<T> where T : IEntity
public class MongoDataProvider<T> : IDataProvider<T> where T : IEntity
и у меня есть много моделей, как эти:
public class Account : ISqlDbEntity
public class Log : IMongoDbEntity
с этими интерфейсами:
public interface IMongoDbEntity : IEntity
public interface ISqlDbEntity : IEntity
Как зарегистрировать или можно зарегистрировать контейнер Windsor как generics, но MondoDbEntity будет использоваться с MongoDbProvider, а также модели MsSQl с SqlDataProvider.
container.Register(Component.For(typeof(IDataProvider<>))
.ImplementedBy(typeof(SqlDataProvider<>))
.LifestylePerWebRequest()); //I want this work only with ISqlEntity
container.Register(Component.For(typeof(IDataProvider<>))
.ImplementedBy(typeof(MongoDataProvider<>))
.LifestylePerWebRequest()); //I want this work only with IMongoDbEntity
Я попытался это, но не работает:
container.Register(Component.For(typeof(IDataProvider<ISqlDbEntity>))
.ImplementedBy(typeof(SqlDataProvider<>))
.LifestylePerWebRequest());
container.Register(Component.For(typeof(IDataProvider<IMongoDbEntity>))
.ImplementedBy(typeof(MongoDataProvider<>))
.DependsOn(Dependency.OnAppSettingsValue("databaseName", "MongoDatabaseName"))
.LifestylePerWebRequest());
Thx заранее!
Я может быть что-то отсутствует, но почему не могу вам это сделать 'container.Register (Component.For (TypeOf (IDataProvider)) .ImplementedBy (TypeOf (SqlDataProvider )) .LifestylePerWebRequest ()); ' –
pquest
Thx, но это все еще не работает. Контейнер Windsor заставляет регистрировать каждый компонент один за другим, с таким типом регистрации. –