Я бы предложил другой подход. Разделите файлы на слова и оставьте только слова длиной не более 5 символов. Используйте наборы, чтобы найти пересечение - это будет быстрее.
db_words = set([x for x in db.split() if len(x) > 4])
lp_words = set([x for x in lp.split() if len(x) > 4])
matches = db_words & lp_words
Если вы хотите исключить слова одного и того же символа, вы можете определить понимание списка следующим образом:
[x for x in db.split() if len(x) > 4 and x != x[0]*len(x)]
Если вы ищете любую последовательную последовательность [ 113] символов, которые соответствуют, это может работать лучше:
i_skip = set() # characters to skip if they are already in a printed word
j_skip = set()
for i in range(len(db)-4):
if i in i_skip: continue
for j in range(len(lp)-4):
if j in j_skip: continue
if db[i] == lp[j]:
word_len = 5
while db[i:i+word_len] == lp[j:j+word_len]:
if db[i:i+word_len+1] == lp[j:j+word_len+1]:
word_len += 1
else:
print(db[i:i+word_len])
i_skip.update(range(i, i+word_len))
j_skip.update(range(j, j+word_len))
break
Как David сказал, Вы не можете, но IHandlerSelector позволит Вам взять на себя управление. Проверьте тесты для понимания то, как использовать их: https://svn.castleproject.org/svn/castle/trunk/InversionOfControl/Castle. Виндзор. Tests/HandlerSelectorsTestCase.cs
В основном Вы сделали бы что-то как:
public class WritenExamHandler : IHandlerSelector
{
public bool HasOpinionAbout(string key, Type service)
{
// Decision logic here
return somethingThatWouldBeTrueToSelectWritenExam && service == typeof(IExamCalc);
}
public IHandler SelectHandler(string key, Type service, IHandler[] handlers)
{
return handlers.Where(handler => handler.ComponentModel.Implementation == typeof (WritenExam)).First();
}
}
и затем Вы регистрируете его в:
container.Kernel.AddHandlerSelector(new WritenExamHandler());
Это позволит Вам легко заниматься multi-tenency проблемами :)
Короткий ответ, Вы не можете. Этот предпочтительный вид зависит от кода приложения, поэтому если Вы просто сделали container.Resolve<IExamCalc>
, затем Виндзор не мог знать, какой Вы хотели.
Вопрос спросить состоит в том, как Вы знаете который тип использовать?
Коллективная аренда определяется как способность запустить Ваше программное обеспечение на одном экземпляре, служа нескольким арендаторам/клиентам/клиентам. Я предполагаю, что Вы могли столкнуться с проблемами как Ваши чаще в установке коллективной аренды.
Все Ваши компоненты имеют ключи, которые являются уникальными строками, таким образом, Вы всегда можете так a container.Resolve("someKey")
получить определенную реализацию.
Если Вы хотите иметь определенную реализацию, автоматически введенную, можно настроить компонент как это (от моей памяти, может не быть на 100% точным):
<component id="someService.customer1" service="ISomeService" type="Customer1SomeService" />
<component id="anotherId" service="IAnotherService" type="AnotherService">
<parameters>
<parameterName> <!-- as written in the ctor's signature -->
${someService.customer1}
</parameterName>
</parameters>
</component>